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是客户订单项目。