Pendekatan LINQ untuk Kemas Kini Data Bersyarat
LINQ (Language Integrated Query) menyediakan cara yang cekap untuk mengurus logik bersyarat, mencerminkan kefungsian pernyataan CASE SQL, terutamanya apabila mengemas kini rekod pangkalan data. Mari kita periksa bagaimana untuk mencapai ini.
Senario biasa melibatkan pengemaskinian lajur berdasarkan berbilang syarat. Pertimbangkan contoh SQL ini:
<code class="language-sql">UPDATE osc_products SET 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>
Pernyataan SQL ini mengemas kini products_quantity
berdasarkan kriteria yang berbeza. Pertanyaan LINQ yang setara ialah:
<code class="language-csharp">cdsDBDataContext db = new cdsDBDataContext(); var query = from items in db.cdsItems where items.ItemHandHeldFlag == "Y" let quantity = ( items.ItemPromoFlag != 'N' ? 100000 : (items.ItemCat1.In("1", "2", "31") && items.ItemSaleStatus == "S") ? 100000 : items.ItemSaleStatus == "O" ? 0 : items.ItemQtyOnHand - items.ItemQtyCommitted ) select new { ItemId = items.ItemId, UpdatedQuantity = quantity };</code>
Pertanyaan LINQ ini menggunakan kata kunci let
untuk mentakrifkan quantity
yang dikira berdasarkan logik bersyarat. Pengendali ternary (? :
) menyediakan cara ringkas untuk melaksanakan kefungsian pernyataan CASE. Pemilihan terakhir termasuk ItemId
dan UpdatedQuantity
yang dikira, membolehkan kemas kini pangkalan data yang cekap.
Ini mempamerkan fleksibiliti LINQ dalam mengendalikan kemas kini bersyarat yang kompleks, menyediakan alternatif yang berkuasa untuk mengarahkan pernyataan SQL CASE dalam kod C# anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meniru Penyata SQL CASE dalam Pertanyaan LINQ untuk Kemas Kini Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!