2011-12-13 7 views
5

C#ルックアップ構造から値を取得する方法に興味があります。C#ルックアップから値を取得

例:

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

問題が

myLookupItem.ToString() 

代わりのみSystem.Linq.Lookup2[System.String,System.Int32]が表示され、実際の値を表示しないことです

その後、私はラムダを使用してルックアップ値を取得する必要があります:

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

が、これも上記と同じになります。

これを達成する方法を教えてください。

ありがとうございます。

答えて

10

これは、ルックアップアイテムがコレクションであるためです。あなたはこのように、ルックアップのすべての値を見ることができます:

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

は、「私はそれはあなたがそれが意味するものだと思う意味はないと思います。」

Aルックアップ(from MSDN):

は、それぞれが1つまたは複数の値にマッピングされたキーのコレクションを表します。

つまり、これらのグループは(であっても、これらのグループが単数である場合でも)グループ化されます。

ルックアップの代わりに辞書のようなものを使いたいようです。辞書の場合。 ToLookup()拡張メソッドの代わりにToDictionary()拡張メソッドを使用できます。次に、キーと値を辞書に使用します。

+1

考えられない...! –