web-dev-qa-db-fra.com

LINQ - Rechercher tous les éléments d'une liste qui ne figurent pas dans une autre liste

Je suis coincé avec une requête LINQ (ou tout autre moyen efficace d'accomplir la même chose). Quelqu'un peut-il me montrer comment je peux sélectionner tous les éléments d'une liste qui ne sont pas présents dans une autre liste?

Fondamentalement, j'ai une liste que j'ai formée en faisant correspondre des éléments entre deux autres listes. J'ai besoin de trouver tous les éléments de la première liste pour lesquels aucune correspondance n'a été trouvée. Quelqu'un peut-il remplir les étoiles de la deuxième requête LINQ ci-dessous avec la requête qui permettrait d'atteindre cet objectif? Si j'utilisais TSQL, je ferais SELECT * NOT IN (), mais je ne pense pas que LINQ le permette.

//Create some sample lists.
List<IdentifierLookupData> list1 = new List<IdentifierLookupData> { /*Init */ };
List<IdentifierLookupData> list2 = new List<IdentifierLookupData> { /*Init */ };

//Find all items in list1 and list2 that match and store them in joinItems.
var joinItems = (from d1 in list1
    join d2 in list2 on d1 equals d2
    select d1).ToList<IdentiferLookupData>();

//Find all items in list1 not in joinItems.
var deletedItems = (from d1 in list1
     ***select all items not found in joinItems list.***
44

Essayez d'utiliser .Except méthode d'extension (documents) :

var result = list1.Except(list2);

vous donnera tous les éléments dans list1 qui ne sont pas dans list2.

99
Dimitri

Essaye ça:

var List2 = OriginalList.Where(item => !List1.Any(item2 => item2.ID == item.ID));
15

La manière la plus simple consiste à utiliser la méthode Except.

var deletedItems = list1.Except(joinItems);

Cela renverra l'ensemble des éléments dans list1 qui n'est pas contenu dans joinItems

11
JaredPar