48 votes

La liste des requêtes Linq contient une liste

J'ai 2 classes de niveau A :

public class ObjectA
{
    public int Id;
    public string Name;
}

public class ObjectB
{
    public int Id;
    public string Name;
    public List<ObjectA> ListOfObjectA;
}

J'ai donc deux listes : Une de l'objet B (ListObjectB) et une autre contenant une liste d'identifiants de l'objet A (appelée ListOfIdsA). Dans ce cas, je veux obtenir une liste d'ObjectB où ObjectB.ListOfObjectA est dans la ListOfIdsA.

Ma première (et mauvaise) approche était

ListObjectB.Where(p=> ListOfIdsA.Contains(p.ListOfObjectA.Select(b=>b.Id)))

Mais cela lève évidemment une exception. Je l'ai cherché sur Google, stackoverflowed, mais je pense que mes compétences de recherche ne sont pas très bonnes dans ce domaine, quelqu'un peut-il donner une réponse ninja à cette question ? (De préférence en expression lambda)

92voto

Jon Skeet Points 692016

Essayez vous d'obtenir une liste d'ObjectBs où tous des ObjectAs sont dans ListOfIdsA, ou tout d'eux ?

Je pense que tu veux l'un ou l'autre :

ListObjectB.Where(p => p.ListOfObjectA.Any(x => ListOfIdsA.Contains(x.Id)))

ou

ListObjectB.Where(p => p.ListOfObjectA.All(x => ListOfIdsA.Contains(x.Id)))

(Vous pourriez bien vouloir faire ListOfIdsA a HashSet<string> s'il est d'une taille significative, d'ailleurs).

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