使用linq将对象集合的列表成员的内容合并为单个列表
本文关键字:列表 合并 单个 成员 对象 集合 linq 使用 | 更新日期: 2023-09-27 18:18:18
是否可以将下面的foreach循环替换为linq?
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>>
。
您可以在foo上使用SelectMany()。酒吧
allBars.AddRange(fooList.SelectMany(foo => foo.Bars));
如果allBars变量不包含AddRange()之前的任何内容,您可以跳过对象创建:
List<Bar> allBars = fooList.SelectMany(foo => foo.Bars).ToList();
如果你不打算在其他地方使用傻瓜,你可以这样写:
List<Bar> allBars = GetFooList().SelectMany(foo => foo.Bars).ToList();
Linq的SelectMany是你的朋友。
http://msdn.microsoft.com/en-us/library/bb534336.aspxfooList.SelectMany(f => f.Bars)
List<Foo> fooList = GetFooList();
List<Bar> allBars = fooList.SelectMany(x => x.Bars).ToList();
还有一个
List<Bar> allBars = fooList.SelectMany(foo => foo.Bars).ToList();