列出 LINQ 中的深度嵌套子实体

本文关键字:嵌套 实体 深度 LINQ 列出 | 更新日期: 2023-09-27 18:36:42

我有一个包含许多嵌套集合的模型。 例如。。。

My Sales Record
  Contains a collection of Customers
    Each Customer contains a collection of Orders
      Each Order contains a collection of Items

我希望能够创建与销售记录关联的所有项目的列表,而不会导致写入嵌套的 foreach 循环。 我试过...

var items = SalesRecord.SelectMany(r => r.Customers)
               .SelectMany(c => c.Orders)
               .Select(o => o.Items);

但这行不通。

这在 LINQ 中可以实现吗?

列出 LINQ 中的深度嵌套子实体

还有一个选择需要很多:

var items = SalesRecord.Customers // simply select customers from record
               .SelectMany(c => c.Orders)
               .SelectMany(o => o.Items); // here

您需要平展结果,否则您将拥有项目集合。此外,如果您需要项目列表,请不要忘记在查询结束时调用ToList()

使用

Select 将每个销售记录映射到包含该记录的项目以及该记录的项目平展列表,使用多次调用SelectMany

var items = SalesRecord.Select(record => new
{
    record,
    Items = record.Customers
        .SelectMany(c => c.Orders)
        .SelectMany(o => o.Items),
});