使用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>>

使用linq将对象集合的列表成员的内容合并为单个列表

您可以在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.aspx

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