我有一个包含许多嵌套集合的模型。例如......
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中是否可以实现?
答案 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),
});