Implementieren Sie die Logik "nicht in" (auch bekannt als "nicht vorhanden") in LINQ
Konfigurationich habe zwei
List<T>
's.Die Daten sind nicht normalisiert und stammen aus verschiedenen Quellen, was die Faltung in der gewünschten Logik erklärtEin informeller zusammengesetzter Schlüssel in den Daten ist fieldA, fieldB, fieldC.Die "Felder" sind Zeichenfolgen - Referenztypen - daher können ihre Werte null sein. Ich möchte Datensätze dort ablegen, wo sie möglicherweise mit Null übereinstimmen. Ich erhalte, dass null Verweise in C # übereinstimmen, in SQL jedoch nicht. Hinzufügen eines!string.IsNullOrEmpty()
ist einfach genug.Dies ist keine Frage zum DB-Design oder zur relationalen Algebra.Ich habe eine andere Logik, die andere Kriterien abdeckt. Schlagen Sie nicht vor, die angezeigte Logik zu reduzieren, um die Ergebnismenge zu erweitern. Siehe Nr. 5 oben.Das ProblemIch möchte die Datensätze in Liste A finden, die nicht in Liste B enthalten sind, basierend auf dem informellen Schlüssel. Ich möchte dann die Ergebnisse von listA basierend auf einer partiellen Schlüsselübereinstimmung weiter verfeinern.
Die SQL-Version des Problems:
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