Dany:
Tabela o nazwie TABLE_1
zawierającej następujące kolumny:
ID
ColumnA
ColumnB
ColumnC
Mam kwerendy SQL, gdzie TABLE_1
łączy się na siebie dwa razy w oparciu off ColumnA
, ColumnB
, ColumnC
. Zapytanie może wyglądać mniej więcej tak:
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:
Potrzebuję przepisania tego zapytania w LINQ. Próbowałem go dźgnąć:
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 :(
Jak napisać zapytanie w LINQ? Co ja robię źle?
źródło
join T2 in db.tbl2 on new { T1.firstName, T1.secondName } equals new { T2.colFirst, T2.colSecond }
. Jeśli zmienisz to na to, będzie się kompilować,join T2 in db.tbl2 on new { N1 = T1.firstName, N2 = T1.secondName } equals new { N1 = T2.colFirst, N2 = T2.colSecond }
W LINQ2SQL rzadko trzeba jawnie łączyć się podczas korzystania ze sprzężeń wewnętrznych.
Jeśli masz odpowiednie relacje klucza obcego w swojej bazie danych, automatycznie uzyskasz relację w projektancie LINQ (jeśli nie, możesz ręcznie utworzyć relację w projektancie, chociaż naprawdę powinieneś mieć odpowiednie relacje w swojej bazie danych)
Następnie możesz po prostu uzyskać dostęp do powiązanych tabel za pomocą „notacji z kropką”
wygeneruje zapytanie
Moim zdaniem jest to dużo bardziej czytelne i pozwala skoncentrować się na specjalnych warunkach, a nie na faktycznej mechanice łączenia.
Edytuj
Ma to oczywiście zastosowanie tylko wtedy, gdy chcesz dołączyć do linii z naszym modelem bazy danych. Jeśli chcesz dołączyć do „poza modelem” trzeba uciekać się do instrukcji łączy jak w odpowiedzi od Quintin Robinson
źródło
Title_Authors to wyszukiwanie dwóch rzeczy, które łączą się w czasie z wynikami projektu i kontynuują łączenie
źródło
Możesz również użyć:
źródło
Chciałbym podać inny przykład, w którym zastosowano wielokrotne (3) łączenia.
źródło
Możesz również dołączyć, jeśli liczba kolumn nie jest taka sama w obu tabelach i możesz odwzorować wartość statyczną na kolumnę tabeli
źródło
Moim zdaniem jest to najprostszy sposób na połączenie dwóch tabel z wieloma polami:
źródło
Możesz napisać swoje zapytanie w ten sposób.
Jeśli chcesz porównać swoją kolumnę z wieloma kolumnami.
źródło