私はこの構造を持っています
Customer
- has many Orders
- has many OrderItems
CustomerItems
のサブセットを指定して、LINQ経由でOrderItems
のリストを生成したい:
List of new { Customer, List<OrderItem> Items }
これは、顧客がアイテムのサブセットから注文したすべてのアイテムのグループ化です
LINQを使用して注文を追跡し、顧客ごとにグループ化してこのオブジェクトを生成するにはどうすればよいですか?
今のところ私は
items
.GroupBy(i => i, i => i.Order.Customer, (i, customer) => new {customer, i})
しかし、それは明らかにリストではありません。私はどこかに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は顧客の注文品目です。