2017-05-30 19 views
2

私はPeopleOrdersの2つのテーブルと、PeopleOrdersを使用する2対多の関係を持っています。Linqを使用してWhere句と多対多関係をクエリする

各注文には、2人の人物、すなわちClientSalesmanが関連付けられています。

私は、次のクエリを持っている:

[{"Id":1,"OrderId":[2]},{"Id":9,"OrderId":[10,11,12,13]},{"Id":14,"OrderId":[14,15]}] 

ClientIDと受注の配列:

var query = db.People 
       .Where(u => u.Description.Equals("Client")) 
       .Select(u => new {u.Id, OrderId = u.Orders.Select(p => p.Id)) 
}) 
       .ToList(); 

これは、このようなJSONを返します。

私は転倒する必要があります。注文は配列にすることはできません。

だからClientIDに関連付けられたOrderIDが必要です。このような何か:

[{"OrderId":2,"Id":1},{"OrderId":10,"Id":9},{"OrderId":11,"Id":9},{"OrderId":12,"Id":9},{"OrderId":13,"Id":9}] 

クエリはのようになります。

var query = db.Orders 

しかし、私はそれが唯一のクライアントを返すので、人々表を副問合せする必要があります。そうでない場合は、次のような人々の配列を返します。

{"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

関連する問題