Implemente a lógica "não em" (também conhecida como "não existe") no LINQ

ConfiguraçãoEu tenho doisList<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 problema

Eu 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  

questionAnswers(1)

yourAnswerToTheQuestion