J'ai trouvé plusieurs fois des gens qui me posaient la même question mais il semble que la réponse n'ait jamais été satisfaisante même si cela devrait être plutôt facile (en théorie). Voici ma question:Linq to entities - comment sélectionner des entités avec une condition where sur leur entitycollection?
J'ai une entité appelée "Société" à l'intérieur de laquelle j'ai une entitéCollection "Employés" (un à plusieurs). Je dois récupérer toutes les entreprises et pour chacun d'eux, je ne veux que les employés d'un âge supérieur à 21
J'ai essayé:
Return context.Companies.Include("Employees").Where(c => c.Employees.Where(e => e.Age > 21).Count() > 0)
Cela ne fonctionne pas comme il me donne tous les employés chaque entreprise s'il y a au moins un au-dessus de 21 (il est en fait le même que .Tout())
J'ai essayé:
Return context.Companies.Include("Employees").Select(c => New Company {
.Id = c.Id,
.Employees = c.Employees.Where(Function(e) e.Age > 24)
}).ToList()
qui ne fonctionnait pas non plus (bien qu'il aurait été perfe ct), il me donne l'erreur suivante: L'entité ou le type complexe 'MyModel.Company' ne peut pas être construit dans une requête LINQ to Entities.
Comment pouvez-vous sélectionner toutes mes entreprises avec seulement, pour chacune d'entre elles, les employés ayant plus de 21 ans? En ce moment, je sélectionne tout et du côté client, je filtre mes employés mais je n'aime pas cette solution.
Quelqu'un peut-il m'aider?
Merci Morteza Manavi-Parast, ça va faire le travail! Néanmoins, je ne me suis pas convaincu de le faire dans une requête unique qui n'a pas été implémentée dans le framework Entity. C'est une situation relativement courante ... Comme preuve, il y a un certain nombre de questions comme la mienne sur ce forum. Je suis surpris ... Peut-être pour la prochaine version? Pour être clair, j'ai besoin d'une liste d'entreprises car je lie directement le résultat de ma requête à un DataGrid. Pour votre information, lorsque je clique sur une ligne de mon DataGrid (donc en sélectionnant une entreprise), j'ai une deuxième Grille qui est peuplée de ses employés (de plus de 21 ans) provenant de l'entité Collection.
Je suis confus, essayez-vous de retourner une séquence de * entreprises * ou * employés *? Si c'est le cas, qu'est-ce que 'company' a à voir avec votre requête? (puisque vous semblez les récupérer tous) –
Du côté client, j'ai un DataGrid qui est lié à une collection de sociétés qui vient directement de cette requête. – Renaud