Implementar la lógica "no en" (también conocido como "no existe") en LINQ

Preparartengo dosList<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 problema

Quiero 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  

Respuestas a la pregunta(1)

Su respuesta a la pregunta