2017-05-30 86 views
2

我有兩個表PeopleOrders以及使用PeopleOrders這兩者之間的多對多關係。使用Linq查詢具有Where子句和多對多關係的Entity Framework

每個訂單與兩個人相關聯:ClientSalesman

我有以下查詢:

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和訂單的陣列。

我需要反轉。訂單不能是數組。

所以我需要OrderIDClientID關聯。事情是這樣的:

[{"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表,所以它僅返回客戶端;否則,它將返回一組人像:

{"OrderId":2,"Id":[1,10]} 

在此先感謝您。

回答

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

你可以嘗試這樣的事情(使用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(); 
+0

非常感謝您!這解決了這個問題。 – Migu3litto

+0

@ Migu3litto不客氣。我很高興我幫助:)! – Christos

相關問題