我有两个表People
和Orders
以及使用PeopleOrders
的两者之间的多对多关系。
每个订单都与两个人相关联:Client
和Salesman
。
我有以下查询:
var query = db.People
.Where(u => u.Description.Equals("Client"))
.Select(u => new {u.Id, OrderId = u.Orders.Select(p => p.Id))
})
.ToList();
这会返回一个像这样的json:
[{"Id":1,"OrderId":[2]},{"Id":9,"OrderId":[10,11,12,13]},{"Id":14,"OrderId":[14,15]}]
ClientID
和一系列订单。
我需要反转。订单不能是数组。
所以我需要OrderID
与ClientID
相关联。像这样:
[{"OrderId":2,"Id":1},{"OrderId":10,"Id":9},{"OrderId":11,"Id":9},{"OrderId":12,"Id":9},{"OrderId":13,"Id":9}]
查询类似于:
var query = db.Orders
但是我需要子查询People表,所以它只返回Client;否则,它将返回一组人物,如:
{"OrderId":2,"Id":[1,10]}
提前谢谢。
答案 0 :(得分:2)
使用SelectMany
:
var query = db.People
.Where(u => u.Description.Equals("Client"))
.SelectMany(u => u.Orders.Select(p => new {u.Id, p.OrderId}))
.ToList();
答案 1 :(得分:1)
你可以尝试这样的事情(使用SelectMany
,以便平衡数据的投影):
var query = db.People
.Where(person => person.Description.Equals("Client"))
.Select(person => new
{
PersonOrders = person.Orders
.Select(order => new
{
PersonId = person.Id,
OrderId = order.Id))
})
})
.SelectMany(x=>x.PersonOrders)
.ToList();