Ich versuche, die folgende LINQ-Abfrage mit Entity Framework 5 auszuführen:LINQ to Entities Join auf Nullable-Feld, wo Null Impliziert "Match All"
int taskId = 2;
query = from a in Table_A
where a.StatusCode != "DONE"
&& a.Inbound
join b in Table_B
on a.Id equals b.Id_Table_A
join c in Table_C
on a.State equals (c.State ?? a.State)
where 2 == c.Id_Task
&& b.DataType == c.DataType
select a.Id;
Die Linie, die mir Probleme verursacht ist:
on a.State equals (c.State ?? a.State)
Das "State" -Feld in Tabelle_C ist Nullable ... und wenn es Null ist, wird es verwendet, um "alle Zustände" zu implizieren. Wenn also "c.State" gleich null ist, möchte ich, dass der Datensatz übereinstimmt. Wenn ich dies in SQL zu schreiben, würde ich folgendes:
JOIN Table_C ON Table_A.State = ISNULL(Table_C.State, Table_A.State)
Leider bin ich wird die folgende Fehlermeldung gegeben:
Der Name ‚a‘ ist in ihrem Umfang nicht auf der rechten Seite von 'gleich'. Erwägen Sie, die Ausdrücke auf beiden Seiten von 'gleich' zu vertauschen.
Ich werde jedem dankbar sein, der mich über das Geheimnis informieren kann, dass es funktioniert.
Danke.
Statt 'on a.State equals (c.State ?? a.State)' versuchen Sie dies: 'on (c.State == null || a.State gleich c.State)' – Anchit
Danke Anchit ... aber das geht leider nicht. Ich erhalte den folgenden Fehler: Der Name 'c' ist nicht im Bereich auf der linken Seite von 'gleich'. Erwägen Sie, die Ausdrücke auf beiden Seiten von 'gleich' zu vertauschen. –
überprüfen Sie meine Antwort, es sollte funktionieren. Lass es mich wissen, wenn es nicht so ist. – Anchit