Gegeben:
Eine Tabelle TABLE_1
mit den folgenden Spalten:
ID
ColumnA
ColumnB
ColumnC
Ich habe SQL - Abfrage , wo TABLE_1
auf sich selbst schließt sich zweimal aus der Basis ColumnA
, ColumnB
, ColumnC
. Die Abfrage könnte ungefähr so aussehen:
Select t1.ID, t2.ID, t3.ID
From TABLE_1 t1
Left Join TABLE_1 t2 On
t1.ColumnA = t2.ColumnA
And t1.ColumnB = t2.ColumnB
And t1.ColumnC = t2.ColumnC
Left Join TABLE_1 t3 On
t2.ColumnA = t3.ColumnA
And t2.ColumnB = t3.ColumnB
And t2.ColumnC = t3.ColumnC
... and query continues on etc.
Problem:
Diese Abfrage muss in LINQ neu geschrieben werden. Ich habe versucht, es zu versuchen:
var query =
from t1 in myTABLE1List // List<TABLE_1>
join t2 in myTABLE1List
on t1.ColumnA equals t2.ColumnA
&& t1.ColumnB equals t2.ColumnA
// ... and at this point intellisense is making it very obvious
// I am doing something wrong :(
Wie schreibe ich meine Anfrage in LINQ? Was mache ich falsch?
quelle
join T2 in db.tbl2 on new { T1.firstName, T1.secondName } equals new { T2.colFirst, T2.colSecond }
. Wenn Sie dies ändern, wird es jedoch kompiliertjoin T2 in db.tbl2 on new { N1 = T1.firstName, N2 = T1.secondName } equals new { N1 = T2.colFirst, N2 = T2.colSecond }
In LINQ2SQL müssen Sie selten explizit beitreten, wenn Sie innere Verknüpfungen verwenden.
Wenn Sie ordnungsgemäße Fremdschlüsselbeziehungen in Ihrer Datenbank haben, erhalten Sie automatisch eine Beziehung im LINQ-Designer (wenn nicht, können Sie eine Beziehung manuell im Designer erstellen, obwohl Sie wirklich richtige Beziehungen in Ihrer Datenbank haben sollten).
Dann können Sie einfach mit der "Punktnotation" auf verwandte Tabellen zugreifen.
generiert die Abfrage
Meiner Meinung nach ist dies viel besser lesbar und ermöglicht es Ihnen, sich auf Ihre besonderen Bedingungen zu konzentrieren und nicht auf die eigentliche Mechanik der Verbindung.
Bearbeiten
Dies gilt natürlich nur, wenn Sie sich der Linie mit unserem Datenbankmodell anschließen möchten. Wenn Sie "außerhalb des Modells" beitreten möchten, müssen Sie auf manuelle Verknüpfungen zurückgreifen, wie in der Antwort von Quintin Robinson
quelle
Title_Authors ist eine Suche nach zwei Dingen, die sich zu einem bestimmten Zeitpunkt verbinden und die Verkettung fortsetzen
quelle
Sie können auch verwenden:
quelle
Ich möchte ein weiteres Beispiel geben, in dem mehrere (3) Verknüpfungen verwendet werden.
quelle
Sie können auch beitreten, wenn die Anzahl der Spalten in beiden Tabellen nicht gleich ist, und statische Werte der Tabellenspalte zuordnen
quelle
Meiner Meinung nach ist dies der einfachste Weg, zwei Tabellen mit mehreren Feldern zu verbinden:
quelle
Sie können Ihre Anfrage so schreiben.
Wenn Sie Ihre Spalte mit mehreren Spalten vergleichen möchten.
quelle