Implemente a lógica "não em" (também conhecida como "não existe") no LINQ
ConfiguraçãoEu tenho dois
List<T>
é.Os dados não são normalizados e de diferentes fontes explica a convolução na lógica desejadaUma chave composta informal nos dados é fieldA, fieldB, fieldC.Os "campos" são strings - tipos de referência - para que seus valores possam ser nulos. Eu quero largar registros onde eles podem estar combinando em null. Eu obtenho que as referências nulas em c # corresponderão, mas em SQL não. Adicionando um!string.IsNullOrEmpty()
é bastante fácil.Esta não é uma questão sobre design de banco de dados ou álgebra relacional.Eu tenho outra lógica que abrange outros critérios. Não sugira reduzir a lógica mostrada de forma que ela possa ampliar o conjunto de resultados. Veja o item 5 acima.O problemaEu quero encontrar os registros em listA que não estão na lista B com base na chave informal. Desejo então refinar ainda mais os resultados da listaA com base em uma correspondência de chave parcial.
A versão do SQL do 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