49 votes

Rechercher si la listeA contient des éléments qui ne figurent pas dans la listeB

J'ai deux listes :

 List<int> listA     
List<int> listB

Comment vérifier à l'aide de LINQ si dans le listA existe un élément qui n'existe pas dans le listB ? Je peux utiliser la foreach mais je me demande si je peux le faire en utilisant LINQ

102voto

cadrell0 Points 9152

listA.Except(listB) vous donnera tous les éléments de la listeA qui ne sont pas dans la listeB

38voto

SLaks Points 391154
if (listA.Except(listB).Any())

17voto

the_joric Points 4755
listA.Any(_ => listB.Contains(_))

:)

9voto

dasblinkenlight Points 264350

Vous pouvez le faire en une seule ligne

 var res = listA.Where(n => !listB.Contains(n));

Ce n'est pas le moyen le plus rapide de le faire : si listB est relativement long, cela devrait être plus rapide :

 var setB = new HashSet(listB);
var res = listA.Where(n => !setB.Contains(n));

3voto

Onur Points 508

List a une méthode Contains qui renvoie bool. Nous pouvons utiliser cette méthode dans la requête.

 List<int> listA = new List<int>();
List<int> listB = new List<int>();
listA.AddRange(new int[] { 1,2,3,4,5 });
listB.AddRange(new int[] { 3,5,6,7,8 });

var v = from x in listA
        where !listB.Contains(x)
        select x;

foreach (int i in v)
    Console.WriteLine(i);

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