从C#查找中获取价值

时间:2011-12-13 12:45:22

标签: c#-4.0 ienumerable lookup

我对如何从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());

但这也与上述相同。

请告知如何实现这一目标。

提前致谢。

3 个答案:

答案 0 :(得分:12)

那是因为查找项是一个集合。您可以看到查找的每个值,如下所示:

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

答案 1 :(得分:4)

“我认为这并不意味着你的意思。”

查找(from MSDN):

  

表示每个映射到一个或多个值的键集合。

即。它将它们分组(即使这些组是单数的)。

看起来你想使用像Dictionary这样的东西而不是Lookup。在字典的情况下。您可以使用ToDictionary()扩展方法而不是ToLookup()扩展方法。然后,您可以在字典上使用键和值。

答案 2 :(得分:0)

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