exclude linq except

linq - exclude - intersect c#



¿Cómo funciona LINQ Except? (3)

Posible duplicado:
LINQ encuentra diferencias en dos listas

Quiero encontrar una diferencia entre 2 series. Así que estoy usando Except en la declaración LINQ. Pero Except parece funcionar solo cuando la primera colección es más larga que la segunda. Por ejemplo, esto no devolverá ningún resultado, aunque las 2 colecciones son diferentes.

double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 }; double[] numbers2 = { 2.2 }; IEnumerable<double> onlyInFirstSet = numbers2.Except(numbers1);

¿Alguien puede confirmar si este es el caso? Si es así, tengo que verificar las longitudes de la colección antes de escribir la consulta, porque no sé qué colección será mayor en el momento de la compilación.

Editar

Creo que no estaba claro en mi pregunta. No me importa qué colección contiene qué. Solo quiero encontrar diferencia entre 2 colecciones. ¿Cómo puedo hacer esto?


Por ejemplo, esto no devolverá ningún resultado ...

Eso es correcto.

2.2 existe en la primera colección, por lo que no hay nada que devolver.

No tiene nada que ver con la longitud de los arreglos.


Las otras respuestas le dicen cómo puede eliminar un conjunto de números de otro conjunto. Leyendo tu pregunta, creo que quieres lo que está en el primero pero no en el segundo, y viceversa:

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);


Tomado de 101 muestras de 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); }

Resultado

Números en la primera matriz pero no en la segunda matriz: 0 2 4 6 9