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.***
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
.
Essaye ça:
var List2 = OriginalList.Where(item => !List1.Any(item2 => item2.ID == item.ID));
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