2011-12-13 14 views
5

C# arama yapısından nasıl değer alacağımı merak ediyorum.C# lookup değerden alın

Örnek:

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()); 
        } 

Sorun

myLookupItem.ToString() 

gerçek değerini yerine sadece System.Linq.Lookup2[System.String,System.Int32] görüntülenir göstermek olmamasıdır.

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

ancak bu da yukarıdaki ile aynıdır verir: Daha sonra

, ben lambda kullanarak arama değerini almalısınız.

Lütfen bunu nasıl yapacağınızı bildirin.

Şimdiden teşekkürler.

cevap

10

Arama öğesi bir koleksiyon olduğu için. Böyle arama her değerini görebilirsiniz:

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

"Bunun ne anlama düşüncelerinizi anlamına sanmıyorum."

bir Arama (from MSDN):

her biri bir veya daha fazla değer eşlenmiş şifreler bir koleksiyon temsil eder.

yani, gruplar olması (bu gruplar tekil bile).

Arama yerine Sözlük gibi bir şey kullanmak istediğiniz gibi görünüyor. Sözlük durumunda. ToLookup() uzantı yöntemi yerine ToDictionary() uzantı yöntemini kullanabilirsiniz. Sonra sözlükte anahtar ve değer kullanırsınız.

+1

Inconceivable ...! –