Menterjemah Penyata SQL CASE kepada LINQ: Panduan Praktikal
Artikel ini menangani cabaran untuk menukar pernyataan SQL CASE kepada persamaan LINQ mereka. Seorang pengguna meminta bantuan dalam menterjemah coretan SQL berikut:
<code class="language-sql">osc_products.products_quantity = CASE WHEN itempromoflag 'N' THEN 100000 WHEN itemcat1 IN ('1','2','31') AND itemsalestatus = 'S' THEN 100000 WHEN itemsalestatus = 'O' THEN 0 ELSE cds_oeinvitem.itemqtyonhand - cds_oeinvitem.itemqtycommitted END </code>
Percubaan LINQ awal yang disediakan tidak mencukupi:
<code class="language-csharp">cdsDBDataContext db = new cdsDBDataContext(); var query = from items in db.cdsItems where items.ItemHandHeldFlag.Equals("Y") && items.ItemQtyOnHand - items.ItemQtyCommitted > 0 select items;</code>
Pertanyaan ini hanya menapis data; ia tidak melaksanakan logik pernyataan SQL CASE.
Untuk ilustrasi yang lebih jelas tentang pernyataan CASE LINQ yang setara, mari kita periksa contoh yang lebih mudah:
<code class="language-csharp">Int32[] numbers = new Int32[] { 1, 2, 1, 3, 1, 5, 3, 1 }; var numberText = ( from n in numbers where n > 0 select new { Number = n, Text = ( n == 1 ? "One" : n == 2 ? "Two" : n == 3 ? "Three" : "Unknown" ) } );</code>
Ini menunjukkan penggunaan pengendali bersyarat ternary (?:
) untuk meniru gelagat pernyataan CASE. Syarat dinilai secara berurutan, mengembalikan nilai yang sesuai untuk setiap perlawanan. Hasilnya ialah urutan objek tanpa nama, setiap satu mengandungi nombor dan perwakilan teksnya. Menggunakan prinsip ini pada pernyataan SQL CASE asal memerlukan pendekatan bersyarat bersarang yang serupa dalam pertanyaan LINQ, menyesuaikannya dengan struktur data dan perhubungan tertentu dalam db.cdsItems
dan berpotensi bergabung dengan jadual lain untuk mengakses itempromoflag
, itemcat1
dan itemsalestatus
. Syarat ELSE
akan mewakili nilai lalai jika tiada syarat sebelumnya dipenuhi.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menerjemahkan Pernyataan SQL CASE Secara Berkesan ke dalam Pertanyaan LINQ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!