是否可以用linq替换下面的foreach循环?
public class Foo
{
List<Bar> Bars {get; set;}
}
List<Foo> fooList = GetFooList();
List<Bar> allBars = new List<Bar>();
foreach (Foo foo in fooList)
{
allBars.AddRange(foo.Bars);
}
我最接近的是:
var temp = fooList.Select(foo => foo.Bars).ToList();
给出List<List<Bar>>
。
答案 0 :(得分:2)
您可以在foo.Bars上使用SelectMany()
allBars.AddRange(fooList.SelectMany(foo => foo.Bars));
如果allBars变量在AddRange()之前不包含任何内容,则可以跳过对象创建:
List<Bar> allBars = fooList.SelectMany(foo => foo.Bars).ToList();
如果你不打算在其他地方使用fooList,你可以写:
List<Bar> allBars = GetFooList().SelectMany(foo => foo.Bars).ToList();
答案 1 :(得分:1)
Linq的SelectMany是你的朋友。
http://msdn.microsoft.com/en-us/library/bb534336.aspx
fooList.SelectMany(f => f.Bars)
答案 2 :(得分:1)
另一种变化:
List<Foo> fooList = GetFooList();
List<Bar> allBars = fooList.SelectMany(x => x.Bars).ToList();
答案 3 :(得分:1)
这是另外一个
List<Bar> allBars = fooList.SelectMany(foo => foo.Bars).ToList();