2011-12-13 13 views
5

Sono interessato a come ottenere il valore dalla struttura di ricerca C#.Ottieni valore dalla ricerca C#

Esempio:

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 è che il

myLookupItem.ToString() 

non visualizza valore effettivo, invece viene visualizzato solo System.Linq.Lookup2[System.String,System.Int32].

Più tardi, dovrei ottenere il valore di ricerca utilizzando lambda:

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

ma questo dà anche lo stesso come sopra.

Si prega di indicare come ottenere questo.

Grazie in anticipo.

risposta

10

Questo perché l'elemento di ricerca è una raccolta. Si può vedere ogni valore della ricerca in questo modo:

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

"Io non credo che significa che cosa pensate che significhi".

A Lookup (from MSDN):

Rappresenta un insieme di chiavi ogni mappati a uno o più valori.

cioè esso li raggruppa (anche se questi gruppi sono singolari).

Sembra che tu voglia utilizzare qualcosa come un dizionario invece di una ricerca. Nel caso di un dizionario. È possibile utilizzare il metodo di estensione ToDictionary() anziché il metodo di estensione ToLookup(). Dovresti quindi utilizzare la chiave e il valore sul dizionario.

+1

Inconcepibile ...! –