2012-03-01 9 views

Respuesta

72

listA.Except(listB) le dará todos los elementos de listaA que no están en listaB

+1

sí, va a hacer esto. Pero como se trata de una operación basada en conjuntos, vale la pena recordar que la lista resultante también eliminará los duplicados presentes en ListA o ListB. – Holf

32
if (listA.Except(listB).Any()) 
4

Usted puede hacerlo de una sola línea

var res = listA.Where(n => !listB.Contains(n)); 

ésta no es la manera más rápida de hacerlo: en el caso listB es relativamente largo, esto debe ser más rápido:

var setB = new HashSet(listB); 
var res = listA.Where(n => !setB.Contains(n)); 
11
listA.Any(_ => listB.Contains(_)) 

:)

+1

Esta es la mejor respuesta, porque las soluciones proporcionadas por @ cadrell0 y SLaks solo verificarán si A contiene todos los elementos de B, pero no si B tiene más elementos que no coinciden con A. Esta solución es válida, por ejemplo, a continuación. A: [0,1,2,3]; B: [0,1,2,3,4] 'listA.Except (listB) .Any() == false' ' listA.Any (_ => listB.Contains (_)) == true' –

+0

@TomaszJuszczak Cierto, pero la pregunta específicamente solo pregunta si A contiene algo que no está en B, es decir, ** debe ** evaluar a falso si B contiene algo que no está en A siempre que A no contenga algo que no esté en B. Entonces, esta respuesta es incorrecto. (Sí, entendí mal la pregunta cuando leí por primera vez). –

2

Lista tiene Contiene método que volver bool. Podemos usar ese método en la consulta.

List<int> listA = new List<int>(); 
List<int> listB = new List<int>(); 
listA.AddRange(new int[] { 1,2,3,4,5 }); 
listB.AddRange(new int[] { 3,5,6,7,8 }); 

var v = from x in listA 
     where !listB.Contains(x) 
     select x; 

foreach (int i in v) 
    Console.WriteLine(i); 
0

Este código compara dos listas que contienen un campo para un CultureCode como 'en-GB'. Esto dejará traducciones no existentes en la lista. (Necesitábamos una lista desplegable de idiomas no traducidas de los artículos)

var compared = supportedLanguages.Where(sl => !existingTranslations.Any(fmt => fmt.CultureCode == sl.Culture)).ToList();

Cuestiones relacionadas