2 votes

Utilisation de Linq pour interroger Entity Framework avec la clause Where et la relation many-to-many

J'ai deux tableaux People y Orders et une relation de plusieurs à plusieurs entre les deux en utilisant PeopleOrders .

Chaque commande est associée à deux personnes : Client y Salesman .

J'ai la requête suivante :

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

Cela renvoie un json comme ceci :

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

En ClientID et un tableau de commandes.

J'ai besoin d'inverser. Les commandes ne peuvent pas être un tableau.

Donc j'ai besoin OrderID associé à la ClientID . Quelque chose comme ça :

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

La requête serait quelque chose comme :

var query = db.Orders

Mais j'ai besoin d'effectuer une sous-recherche dans le tableau des personnes, afin qu'il ne renvoie que le client ; sinon, il renverra un tableau de personnes :

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

Merci d'avance.

2voto

octavioccl Points 5944

Utilice SelectMany :

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

1voto

Christos Points 11296

Vous pouvez essayer quelque chose comme ceci (en utilisant SelectMany afin d'aplanir la projection de vos données) :

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();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X