3 Stimmen

Gruppenverbindung mit mehreren Bedingungen, wobei eine davon mit einem Konstanten ist

Hier ist ein Ausschnitt meines (VB) LINQ:

Von event_evn In xmlEvents.Descendants("event_evn") _
Join genre_gnr In xmlGenre.Descendants("genre_gnr") On event_evn.Element("evn_gnr_id") Equals genre_gnr.Element("gnr_id").Value _
Group Join eventdata_eda In xmlEventData.Descendants("eventdata_eda") On _
eventdata_eda.Element("eda_evn_id").Value Equals event_evn.Element("evn_id").Value And _
eventdata_eda.Element("eda_dty_id").Value Equals "15" _
Into edaList = Group _
From eventdata_eda In edaList.DefaultIfEmpty() _
Where _

Ich bekomme einen Fehler in der letzten Zeile mit dieser Meldung: "Sie müssen auf beiden Seiten des 'Equals'-Operators mindestens eine Bereichsvariable referenzieren" Wie mache ich ein Gruppen-Join mit mehreren Bedingungen, wobei eine dieser Bedingungen mit einer Konstanten verglichen wird?

Ich habe zwei Stellen mit der Antwort gefunden:
http://forums.asp.net/p/1209451/2127071.aspx#2127071
LINQ to SQL - Left Outer Join with multiple join conditions

Allerdings ist es sowohl in C# als auch ich brauche es in VB.

Vielen Dank im Voraus :)

4voto

lee-m Punkte 1271

Ich hatte kürzlich ein ähnliches Problem und konnte es umgehen, indem ich eine Variable eines anonymen Typs innerhalb der LINQ-Abfrage deklarierte, um alle Werte zu speichern, die ich verbinden wollte, und diese neue temporäre Variable in den Verknüpfungsbedingungen zu verwenden. Ihr Code würde also ungefähr so aussehen:

Von event_evn In xmlEvents.Descendants("event_evn") _
Lassen Sie JoinVals = New With { .EvnId = event_evn.Element("evn_id").Value, _
                          .Fifteen = "15" } _
Join genre_gnr In xmlGenre.Descendants("genre_gnr") On event_evn.Element("evn_gnr_id") Gleich genre_gnr.Element("gnr_id").Value _
Gruppieren Sie Join eventdata_eda In xmlEventData.Descendants("eventdata_eda") Auf _
eventdata_eda.Element("eda_evn_id").Value Gleich JoinVals.EvnId Und _
eventdata_eda.Element("eda_dty_id").Value Gleich JoinVals.Fifteen _
In edaList = Group _
Von eventdata_eda In edaList.DefaultIfEmpty() _
Wo _

0voto

Leigh Punkte 51

Um ein LEFT JOIN mit einem konstanten Wert durchzuführen, habe ich folgendes hinzugefügt:

...
Group Join j In  On  Into Group
From g In Group.Where(Function(f) f.ColumnName = "").DefaultIfEmpty()

Unter Verwendung von LinqPad habe ich überprüft und der erwartete SQL-Code wurde generiert.

...
LEFT OUTER JOIN  ON 
AND [].[ColumnName] = ''

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X