循环ILookup,访问值

Jon*_*ono 11 .net c# linq

ILookup< string, List<CustomObject> >从一些linq 得到了一个我做过的.

我现在想迭代结果:

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

我知道我必须歪曲a IGroupingas KeyValuePair,但现在我不确定如何正确访问它.

Ger*_*old 15

ILookup 是列表清单:

public interface ILookup<TKey, TElement> : IEnumerable<IGrouping<TKey, TElement>>
Run Code Online (Sandbox Code Playgroud)

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

IEnumerable<TElement>
Run Code Online (Sandbox Code Playgroud)

...查找是

IEnumerable<IEnumerable<TElement>>
Run Code Online (Sandbox Code Playgroud)

你的情况TElement同样的列表,所以你最终

IEnumerable<IEnumerable<List<CustomObject>>>
Run Code Online (Sandbox Code Playgroud)

这就是你如何循环客户:

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


L.B*_*L.B 7

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

foreach (var item in lookupTable)
{
    Console.WriteLine(item.Key);
    foreach (var obj in item)
    {
        Console.WriteLine(obj);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

一个简单的例子:

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