Implementar la lógica "no en" (también conocido como "no existe") en LINQ
Preparartengo dos
List<T>
's.Los datos no están normalizados y provienen de diferentes fuentes, lo que explica la convolución en la lógica deseada.Una clave compuesta informal en los datos es fieldA, fieldB, fieldC.Los "campos" son cadenas, tipos de referencia, por lo que sus valores podrían ser nulos. Quiero colocar registros donde puedan coincidir en nulo. Obtengo que las referencias nulas en C # coincidirán, pero en SQL no lo hacen. Añadiendo un!string.IsNullOrEmpty()
es bastante fácilEsta no es una pregunta sobre diseño de DB o álgebra relacional.Tengo otra lógica que cubre otros criterios. No sugiera reducir la lógica mostrada de modo que pueda ampliar el conjunto de resultados. Ver # 5 arriba.El problemaQuiero encontrar los registros en la lista A que no están en la lista B según la clave informal. Luego quiero refinar aún más los resultados de la lista A en función de una coincidencia de clave parcial.
La versión SQL del problema:
select
listA.fieldA, listA.fieldB, matching.fieldC
from listA
left join listB keyList on
listA.fieldA = keyList.fieldA and
listA.fieldB = keyList.fieldB and
listA.fieldC = keyList.fieldC
inner join listB matching on
listA.fieldA = matching.fieldA and
listA.fieldB = matching.fieldB
where
keyList.fieldA is null