Duplicata possible:
LINQ trouve des différences dans deux listes
Je veux trouver une différence entre 2 séries. J'utilise donc Except
dans l'instruction LINQ. Mais Except
ne semble fonctionner que lorsque la première collection est plus longue que la seconde. Par exemple, cela ne retournera aucun résultat, même si les 2 collections sont différentes.
double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
double[] numbers2 = { 2.2 };
IEnumerable<double> onlyInFirstSet = numbers2.Except(numbers1);
Quelqu'un peut-il confirmer si c'est le cas? Si c'est le cas, dois-je vérifier la longueur des collections avant d'écrire la requête, car je ne sais pas quelle collection sera plus importante au moment de la compilation.
Éditer
Je pense que je n'ai pas été clair dans ma question. Je me fiche de savoir quelle collection contient quoi. Je veux juste trouver la différence entre 2 collections. Comment puis-je faire ceci?
Extrait de 101 échantillons LINQ :
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
IEnumerable<int> aOnlyNumbers = numbersA.Except(numbersB);
Console.WriteLine("Numbers in first array but not second array:");
foreach (var n in aOnlyNumbers)
{
Console.WriteLine(n);
}
Résultat
Numéros du premier tableau mais pas du deuxième tableau: 0 2 4 6 9
Par exemple, cela ne retournera aucun résultat ...
C'est correct.
2.2
existe dans la première collection, il n'y a donc rien à retourner.
Cela n'a rien à voir avec la longueur des tableaux.
Les autres réponses vous indiquent comment supprimer un ensemble de numéros d'un autre ensemble. En lisant votre question, je pense que vous voulez ce qu'il y a dans le premier mais pas dans le second, et vice-versa:
var numbers1 = new [] { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
var numbers2 = new [] { 2.2, 2.8 };
var intersect = numbers1.Intersect(numbers2);
var diff = numbers1.Concat(numbers2).Except(intersect);