LINQ Group By并select集合

我有这个结构

Customer - has many Orders - has many OrderItems 

我想通过给定一个OrderItems子集的LINQ生成一个CustomerItems列表:

 List of new { Customer, List<OrderItem> Items } 

这是客户从项目子集中订购的所有项目的分组

我怎样才能使用LINQ来回溯通过客户订单和组来生成这个对象?

到目前为止,我在类似的东西

 items .GroupBy(i => i, i => i.Order.Customer, (i, customer) => new {customer, i}) 

但那显然不是一个List。 我猜我需要一个SelectMany在那里,但可以做一些指针。

我想你想要:

 items.GroupBy(item => item.Order.Customer) .Select(group => new { Customer = group.Key, Items = group.ToList() }) .ToList() 

如果你想继续使用你正在使用的GroupBy的重载,你可以这样做:

 items.GroupBy(item => item.Order.Customer, (key, group) => new { Customer = key, Items = group.ToList() }) .ToList() 

…但我个人觉得不太清楚。

你也可能喜欢这个

 var Grp = Model.GroupBy(item => item.Order.Customer) .Select(group => new { Customer = Model.First().Customer, CustomerId= group.Key, Orders= group.ToList() }) .ToList(); 

你可以通过组连接来实现它

 var result = (from c in Customers join oi in OrderItems on c.Id equals oi.Order.Customer.Id into g Select new { customer = c, orderItems = g}); 

c是客户,g是客户订单项目。