1

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

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

4

2 回答 2

2

还需要一个 SelectMany:

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

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

于 2013-10-24T16:43:17.367 回答
0

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

var items = SalesRecord.Select(record => new
{
    record,
    Items = record.Customers
        .SelectMany(c => c.Orders)
        .SelectMany(o => o.Items),
});
于 2013-10-24T16:48:51.177 回答