我有一个循环如下:
foreach(x in myColl)
{
foreach(var y in x.MyList)
{
result.Add(x.MyKey + y)
}
}
这意味着在我的内部循环中,我需要访问当前外部元素的属性。
我正在寻找LINQ声明,但我不确定。我尝试使用
result = myColl
.SelectMany(x => x.MyList)
.SelectMany(x => /* how to get the key of the outer loop here */ + x)
答案 0 :(得分:16)
查询表达式很容易:
(from x in myColl
from y in x.MyList
select x.MyKey + y).ToList()
这是有效的,因为这转换为:
myColl
.SelectMany(x => x.MyList.Select(item => new { List = x, Item = item }))
.Select(x => ...) //rest of the query, whatever you like
关键是保持列表和列表项。使用匿名类型(或任何其他容器)通过查询引导它们。
答案 1 :(得分:5)
有overload of SelectMany允许访问“parent”元素。 ListOfList.SelectMany(list => list.InnerList,(lst,element)=> HandleInnerListAndElementFromIt(lst,element))
result = myColl.SelectMany(x => x.MyList,(x1,x2)=>DoSomething(x1,x2));
编辑补充:
对于您的具体示例,它看起来像这样:
result = myColl.SelectMany(x=>x.MyList,(x,y)=>x.MyKey+y));
请注意,SelectMany方法调用有两个lambda参数。
第一个lambda将取“x”并返回一个新的Enumerable。的 X => x.MyList 强>
第二个lambda取“x”和“y”并产生一个新结果。的(X,Y)=> x.MyKey + Y 强>
答案 2 :(得分:5)
这是我个人更喜欢查询语法
的时候var result = from x in myCol1
from y in x.MyList
select x.MyKey + y;