2011-12-13 86 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]顯示。

後來,我應該使用lambda得到查找值:

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

「我不認爲這意味着什麼,你認爲它的意思。」

查找(from MSDN):

表示每種映射到一個或一個以上值的鍵的集合。

即它基團它們(即使這些基團是單數)。

它看起來像你想使用像一個字典而不是查找。在字典的情況下。您可以使用ToDictionary()擴展方法而不是ToLookup()擴展方法。然後你會在字典上使用鍵和值。

+1

不可思議......! –