2012-01-23 13 views
6

Tengo dos matrices idxListResponse & _index que tienen la misma estructura.C# linq - obtener elementos de la matriz que no existen en una matriz diferente

Cada una de estas matrices contiene un número de elementos con propiedades diferentes uno de los cuales es una matriz de niño llamado INDEXDATA

Cada elemento de esta matriz tiene un número de propiedades uno de los cuales es otra matriz denominada campo de datos. Esto tiene varias propiedades de pares de valores clave.

Así que, en esencia, tengo una jerarquía de 3 matrices separadas.

Estoy buscando obtener el primer nivel de la jerarquía + todos los elementos del 2º nivel donde los elementos de 3er nivel no coinciden, es decir, excluir solo los elementos del 2º nivel donde los elementos de 3er nivel coinciden .

He intentado acercarme a esto de diferentes maneras, pero hasta ahora no estoy llegando a ninguna parte, podría ayudar alguien.

FYI - aquí es mi último intento

var q = idxListResponse.Index.Where(a => 
    a.IndexData.All(b => 
     b.DataField.All(c => 
      _index.Index.Where(z => 
       z.IndexData.All(y => y.DataField.Contains(c.name)) 
      ) 
     ) 
    ) 
); 

Respuesta

23

Except es una buena manera de hacer eso:

var items = source1.Except(source2); 

regresarían todos los artículos en source1 excepto los de source2.

Desde sus colecciones parecen ser de diferentes tipos, que haría algo como:

source1.Except(source2.Select(s => /* selector here */)) 

O puede crear su propia implementación de IEqualityComparer y usarlo para comparar los dos tipos diferentes.

+0

gracias, pero no puedo hacer que funcione. El problema es que si una de las propiedades de un elemento en la tercera matriz coincide entonces parece que se está descartando. Necesito que todas las propiedades de cada elemento en la tercera matriz coincidan con una entrada correspondiente antes de que pueda eliminarse – Johnv2020

Cuestiones relacionadas