循环ILookup,访问值

时间:2014-06-07 16:04:06

标签: c# .net linq

我已经完成了一些linq ILookup< string, List<CustomObject> >

我现在要迭代结果:

foreach(IGrouping<string, List<CustomObject>> groupItem in lookupTable)
{
    groupItem.Key; //You can access the key, but not the list of CustomObject
}

我知道我必须歪曲IGrouping作为KeyValuePair,但现在我不确定如何正确访问它。

3 个答案:

答案 0 :(得分:15)

ILookup是一个列表清单:

public interface ILookup<TKey, TElement> : IEnumerable<IGrouping<TKey, TElement>>

因为IGrouping<TKey, TElement>是(实现)......

IEnumerable<TElement>

...查找

IEnumerable<IEnumerable<TElement>>

在你的情况下,TElement 也是一个列表,所以你最终得到了

IEnumerable<IEnumerable<List<CustomObject>>>

这就是你如何循环客户:

foreach(IGrouping<string, List<CustomObject>> groupItem in lookupTable)
{
    groupItem.Key;
    // groupItem is <IEnumerable<List<CustomObject>>
    var customers = groupItem.SelectMany(item => item);
}

答案 1 :(得分:7)

ILookup中的每个条目都是另一个IEnumerable

foreach (var item in lookupTable)
{
    Console.WriteLine(item.Key);
    foreach (var obj in item)
    {
        Console.WriteLine(obj);
    }
}

修改

一个简单的例子:

var list = new[] { 1, 2, 3, 1, 2, 3 };
var lookupTable = list.ToLookup(x => x);
var orgArray  = lookupTable.SelectMany(x => x).ToArray();

答案 2 :(得分:0)

我首先使用键创建一个枚举,我发现它更容易理解。

KeyError