C# LINQ Group By并选择集合
我有这个结构C# LINQ Group By并选择集合,c#,linq,group-by,C#,Linq,Group By,我有这个结构 Customer - has many Orders - has many OrderItems 我想通过LINQ生成客户项的列表,给定订单项的子集: List of new { Customer, List<OrderItem> Items } 但这显然不是一个清单。我想我需要一个SelectMany,但需要一些指针。我想你需要: items.GroupBy(item => item.Order.Customer) .Select(group
Customer
- has many Orders
- has many OrderItems
我想通过LINQ生成客户项的列表,给定订单项的子集
:
List of new { Customer, List<OrderItem> Items }
但这显然不是一个清单。我想我需要一个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 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是客户订购的商品。您可能也喜欢这样
var Grp = Model.GroupBy(item => item.Order.Customer)
.Select(group => new
{
Customer = Model.First().Customer,
CustomerId= group.Key,
Orders= group.ToList()
})
.ToList();
是否需要对组进行ToList()调用?最后一个ToList()还不够吗?@Joanna:根据OP的要求,匿名类型的Items
属性必须是一个列表。请您提供一些帮助:为什么我得到item.Field
而不是。Order
?我使用的是数据表。
var Grp = Model.GroupBy(item => item.Order.Customer)
.Select(group => new
{
Customer = Model.First().Customer,
CustomerId= group.Key,
Orders= group.ToList()
})
.ToList();