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.
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.
ListA.Where(a => ListX.Any(x => x.b == a.b))
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
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();