在LINQ中列出深层嵌套的子实体

时间:2013-10-24 16:40:22

标签: c# linq

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

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中是否可以实现?

2 个答案:

答案 0 :(得分:2)

还需要一个SelectMany:

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

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

答案 1 :(得分:0)

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

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