Linq用于嵌套循环

我有一个循环如下:

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) 

查询表达式很容易:

 (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 

关键是保持列表和列表项。 使用匿名类型(或任何其他容器)通过查询引导它们。

这是我个人更喜欢查询语法的时候

 var result = from x in myCol1 from y in x.MyList select x.MyKey + y; 

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