2011-12-13 8 views
5

Me interesa saber cómo obtener valor de la estructura de búsqueda C#.Obtener valor de la búsqueda C#

Ejemplo:

var myLookup = (Lookup<string, int>)data.Rows.Cast<DataRow>().ToLookup(row => row["Name"], row => row["Id"]); 

foreach (var myLookupItem in myLookup) 
        { 
         Debug.WriteLine("Name: " + myLookupItem.Key); 
         Debug.WriteLine("Id: " + myLookupItem.ToString()); 
        } 

problema es que el

myLookupItem.ToString() 

no muestra el valor real, en lugar sólo se muestra System.Linq.Lookup2[System.String,System.Int32].

tarde, que debería obtener el valor de búsqueda utilizando lambda:

int lookupValue = myLookup.Where(x => x.Key == "Test").Select(x => x).FirstOrDefault()); 

pero esto también da el mismo que el anterior.

Por favor, indique cómo lograr esto.

Gracias de antemano.

Respuesta

10

Eso es porque el elemento de búsqueda es una colección. Se puede ver cada valor de la consulta de la siguiente manera:

foreach (var myLookupItem in myLookup) 
{ 
    Debug.WriteLine("Key: " + myLookupItem.Key); 
    foreach (var myLookupValue in myLookupItem) 
    { 
     Debug.WriteLine("Value: " + myLookupValue); 
    } 
} 
4

"no creo que significa lo que usted piensa que significa."

una búsqueda (from MSDN):

Representa una colección de teclas cada asignan a uno o más valores.

es decir, se los agrupa (incluso si estos grupos son singular).

Parece que desea utilizar algo así como un diccionario en lugar de una búsqueda. En el caso de un diccionario. Puede usar el método de extensión ToDictionary() en lugar del método de extensión ToLookup(). Luego usaría la clave y el valor en el diccionario.

+1

Inconcertable ...! –

Cuestiones relacionadas