Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Gabung Kiri Terjemahkan ke Batin gabung di Linq

Masalahnya adalah Anda memeriksa Tahun, Kota, dan QsNo pada OutPut variabel setelah bergabung... tetapi jika OutPut adalah null (yang akan terjadi jika tidak ada baris di AllCosts) maka pemeriksaan ini akan selalu salah, sehingga pasangan (kode, Keluaran) akan disaring oleh klausa where. EF mendeteksi fakta ini dan menghasilkan kueri yang lebih efisien hanya dengan menggunakan gabungan dalam.

Yang benar-benar ingin Anda lakukan adalah memfilter baris kandidat dari Biaya, daripada memfilter pasangan (kode, biaya). Untuk melakukan ini, Anda dapat memindahkan filter ke atas, sehingga berlaku langsung ke tabel Biaya:

var Result = from code in ent.ProductCodes
                     join cost 
                       in ent.Costs.Where(c => c.Year == Year && c.City == City && c.QsNo == Qsno)
                       on new { code.Year, code.Code } equals new { cost.Year, cost.Code }
                       into AllCosts
                     from OutPut in AllCosts.DefaultIfEmpty()
                     where code.PageNo == PageNo
                     select new
                     {
                         ProductCode = code.Code
                         Col6 = OutPut.Price
                     };



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cari tahu sudah berapa lama layanan sql server berjalan, dari t-sql

  2. Pilih contoh pertama dari sebuah catatan

  3. Mengacu pada Alias ​​Kolom dalam Klausa WHERE

  4. Cara Membuat Ekstensi untuk SSMS 2019 (v18)

  5. sql suka kueri lambat jika menggunakan parameter nyatakan tetapi cepat jika tidak