web-dev-qa-db-fra.com

Rechercher des éléments d'une liste qui existent dans une autre liste

J'ai un List<PropA>

PropA  
{  
    int a;  
    int b;  
}

et un autre List<PropX>

PropX  
{  
    int a;  
    int b;  
}

Maintenant, je dois trouver des articles de List<PropX> qui existent dans List<PropA> correspondance b propriété utilisant lambda ou LINQ.

35
donstack

Ce que vous voulez faire, c'est Join les deux séquences. LINQ a un opérateur Join qui fait exactement cela:

List<PropX> first;
List<PropA> second;

var query = from firstItem in first
    join secondItem in second
    on firstItem.b equals secondItem.b
    select firstItem;

Notez que l'opérateur Join dans LINQ est également écrit pour effectuer cette opération un peu plus efficacement que les implémentations naïves qui feraient une recherche linéaire dans la deuxième collection pour chaque élément.

30
Servy
ListA.Where(a => ListX.Any(x => x.b == a.b))
64
Adrian Godong
var commonNumbers = first.Intersect(second); 

Cela vous donnera les valeurs communes entre deux listes, une approche beaucoup plus rapide et plus propre que la jointure ou d'autres expressions Lambda.

Essayez-le.

Source: MSDN

24
Ambuj

Eh bien, tout ce qui précède ne fonctionnera pas si vous avez plusieurs paramètres, donc je pense que c'est la meilleure façon de le faire.

Par exemple: Trouvez les objets non assortis d'animaux de compagnie et d'animaux de compagnie2.

var notMatchedpets = pets
    .Where(p2 => !pets2
    .Any(p1 => p1.Name == p2.Name && p1.age == p2.age))
    .ToList();
6
Sachin Prasad