C# 在ILookup上循环,访问值

C# 在ILookup上循环,访问值,c#,.net,linq,C#,.net,Linq,我有一个ILookup来自我做过的一些linq 现在我想重复一下结果: foreach(IGrouping<string, List<CustomObject>> groupItem in lookupTable) { groupItem.Key; //You can access the key, but not the list of CustomObject } foreach(在lookupTable中将groupItem分组) { groupItem.

我有一个
ILookup
来自我做过的一些linq

现在我想重复一下结果:

foreach(IGrouping<string, List<CustomObject>> groupItem in lookupTable)
{
    groupItem.Key; //You can access the key, but not the list of CustomObject
}
foreach(在lookupTable中将groupItem分组)
{
groupItem.Key;//您可以访问密钥,但不能访问CustomObject的列表
}

我知道我一定是将
I分组
误传为
KeyValuePair
,但现在我不确定如何正确访问它

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

ILookup
是一个列表列表:

public interface ILookup<TKey, TElement> : IEnumerable<IGrouping<TKey, TElement>>
因此,这就是您如何在客户之间循环:

foreach(IGrouping<string, List<CustomObject>> groupItem in lookupTable)
{
    groupItem.Key;
    // groupItem is <IEnumerable<List<CustomObject>>
    var customers = groupItem.SelectMany(item => item);
}
foreach(在lookupTable中将groupItem分组)
{
groupItem.Key;
//groupItem是项目);
}

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

IEnumerable<string> keys = lookupTable.Select(t => t.Key);
foreach(string key in keys)
{
    // use the value of key to access the IEnumerable<List<CustomObject>> from the ILookup
    foreach( List<CustomObject> customList in lookupTable[key] )
    {
        Console.WriteLine(customList);
    }        
}
IEnumerable keys=lookupTable.Select(t=>t.Key);
foreach(字符串键入键)
{
//使用key的值从ILookup访问IEnumerable
foreach(在lookupTable[key]中列出customList)
{
Console.WriteLine(自定义列表);
}        
}

我似乎无法创建IEnumerable。但请选择该项。它的内部项作为另一个IEnumerable出现-这应该起作用吗?Select(currentCustomObject=>newotherCustomObject(test.Name))事实上,我也不能在它上面使用foreach。“var obj”是一个列表。@Jono
lookupTable.SelectMany(x=>x.Select(y=>y)).ToList()
应该给出customObj的列表。有关简短示例,请参见编辑错误,值为
IEnumerable
。也就是说,指出索引器可以访问查找是有用的信息。是的,谢谢,一个IEnumerable列表。我编辑了这篇文章以反映你的更正。
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);
}
IEnumerable<string> keys = lookupTable.Select(t => t.Key);
foreach(string key in keys)
{
    // use the value of key to access the IEnumerable<List<CustomObject>> from the ILookup
    foreach( List<CustomObject> customList in lookupTable[key] )
    {
        Console.WriteLine(customList);
    }        
}