D'abord, vous ne se soucient que les itemID à Liste_B, donc:
var bIDs = ListB.Select(x => x.ItemId);
Pour répondre à la première partie de votre question, je approchez-vous en trouvant l'intersection des deux listes (l'ensemble de tous les éléments qu'ils partagent). S'il y a au moins un élément, il y a chevauchement entre les deux.
var sharedIds = ListA.Intersect(bIDs);
if (sharedIds.Any())
// list A contains at least one ItemID which ListB contains
Quant à la deuxième partie, vous voulez voir si la liste A est un sous-ensemble de la liste B. Recherche de cela, le débordement de pile présente un clean solution:
if (!ListA.Except(bIDs).Any())
// yes, list A is a subset of list B
Cet extrait fonctionne parce que ListA.Except(bIDs)
trouve les éléments qui ont ListA
ne le font pas bIDs
. Si cela est vide, alors ListA
ne contient rien que bIDs
ne contient pas. Ainsi, tout ce qui est en ListA
est également en bIDs
. Voici un exemple: A = {1, 2}
; B = {1, 2, 3}
. A est un sous-ensemble de B. A.Except(B)
vous donne un ensemble vide - B a à la fois 1 et 2, donc ne peut pas être dans la liste résultante, et il n'y a plus rien dans B. Alors quand A est un sous-ensemble de B, A.Except(B).Any()
donne false, car il n'y a aucun élément dans le résultat; donc nous le nions évidemment si nous voulons gérer ce cas. Pour être complet, si nous remplaçons A et B par un tour, de sorte que A ne soit pas un sous-ensemble de B: A = {1, 2, 3}
; B = {1, 2}
, puis A.Except(B)
donne {3}
. Il ne peut pas contenir 1 ou 2, parce que B contient 1 et 2. Mais B ne contient pas 3, donc A.Except(B)
peut contenir. Comme {3}
contient un élément, il n'est pas vide, donc A.Except(B).Any()
est vrai. Négatif, il est faux si A n'est pas un sous-ensemble de B.
Mon explication est un peu laconique; Si vous voulez regarder les choses plus loin (et je vous recommande de le faire - une petite théorie des ensembles peut aller un long chemin), A.Except(B)
est le nom de LINQ pour la différence de jeu, ou complément de jeu relatif. Wikibooks a un introduction décent pour établir la théorie si vous êtes si incliné.
Je suis un peu confus au sujet de la partie 2. Est-ce que vous voulez savoir si tous les éléments ListA sont contenus dans les Itemid de B de ou voulez-vous une liste de valeurs ListA contenues dans les ItemId de B. Questions légèrement différentes. Ta dernière phrase c'est ce qui m'a confondu. –
Je veux que chaque long dans ListA soit égal à au moins un MyObject.ItemId dans ListB. – Scott