使用 lambda 查找所有实体

本文关键字:实体 查找 lambda 使用 | 更新日期: 2023-09-27 17:55:22

我有一个List<Person>(人)每个人都有一个List<Kid>(孩子)

如果我想找到所有的孩子,在 LINQ 中,这就是我会做的

var kids=new List<Kids>();
foreach(var p in people)
{
    foreach(var kid in p.Kids)
    {
         kids.Add(kid);
    }
}

是否有使用 LINQ 执行此操作的单行方法?

使用 lambda 查找所有实体

它就像 SelectMany:

将序列的每个元素投影到 IEnumerable 并展平 将生成的序列合并为一个序列。

var kids = people.SelectMany(p => p.Kids);

(如果您想要一个List<Kid>而不是一个IEnumerable<Kid>,只需在结果上调用.ToList()

您可以使用 SelectMany 扩展方法

var kids = new List(people.SelectMany(person => person.Kids));

SelectMany的"LINQ-non-lambda-style"版本:

var allKids = 
  from p in people
  from k in p.Kids  // secondary "from" makes SelectMany (aka flat map)
  select k;
// Result from above is IEnumerable, to Force evaluation as a List:
List<Kid> allKidsList = allKids.ToList();