Diberikan:
Tabel yang diberi nama TABLE_1
dengan kolom berikut:
ID
ColumnA
ColumnB
ColumnC
Saya memiliki query SQL di mana TABLE_1
bergabung pada dirinya sendiri dua kali didasarkan dari ColumnA
, ColumnB
, ColumnC
. Kueri mungkin terlihat seperti ini:
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.
Masalah:
Saya membutuhkan Query untuk ditulis ulang di LINQ. Saya sudah mencoba menikamnya:
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 :(
Bagaimana saya menulis permintaan saya di LINQ? Apa yang saya lakukan salah?
sumber
join T2 in db.tbl2 on new { T1.firstName, T1.secondName } equals new { T2.colFirst, T2.colSecond }
. Jika Anda mengubahnya ke ini, itu akan dikompilasi,join T2 in db.tbl2 on new { N1 = T1.firstName, N2 = T1.secondName } equals new { N1 = T2.colFirst, N2 = T2.colSecond }
Di LINQ2SQL Anda jarang perlu bergabung secara eksplisit saat menggunakan inner joins.
Jika Anda memiliki hubungan kunci asing yang tepat dalam database Anda, Anda akan secara otomatis mendapatkan relasi di perancang LINQ (jika tidak, Anda dapat membuat relasi secara manual di perancang, meskipun Anda harus benar-benar memiliki hubungan yang tepat dalam database Anda)
Kemudian Anda bisa mengakses tabel terkait dengan "titik-notasi"
akan menghasilkan kueri
Menurut pendapat saya ini jauh lebih mudah dibaca dan memungkinkan Anda berkonsentrasi pada kondisi khusus Anda dan bukan mekanisme yang sebenarnya bergabung.
Sunting
Ini tentu saja hanya berlaku ketika Anda ingin bergabung dengan model database kami. Jika Anda ingin bergabung dengan "di luar model" Anda harus menggunakan gabungan manual seperti pada jawaban dari Quintin Robinson
sumber
Title_Authors adalah melihat dua hal bergabung pada hasil proyek waktu dan terus chaining
sumber
Anda juga dapat menggunakan:
sumber
Saya ingin memberikan contoh lain di mana banyak (3) gabungan digunakan.
sumber
Anda juga dapat bergabung jika jumlah kolom tidak sama di kedua tabel dan dapat memetakan nilai statis ke kolom tabel
sumber
Menurut pendapat saya, ini adalah cara paling sederhana untuk bergabung dengan dua tabel dengan beberapa bidang:
sumber
Anda dapat menulis kueri Anda seperti ini.
Jika Anda ingin membandingkan kolom Anda dengan beberapa kolom.
sumber