首頁 >資料庫 >mysql教程 >如何在 LINQ 中實作相當於條件產品數量分配的 SQL CASE 語句?

如何在 LINQ 中實作相當於條件產品數量分配的 SQL CASE 語句?

Linda Hamilton
Linda Hamilton原創
2025-01-11 19:22:42935瀏覽

How to Implement a SQL CASE Statement Equivalent in LINQ for Conditional Product Quantity Assignment?

在 LINQ 中複製 SQL CASE 語句以進行動態產品數量分配

本文示範如何將 SQL CASE 語句的功能轉換為 LINQ,專門解決基於各種條件有條件分配產品數量的挑戰。 我們將修改現有程式碼以合併此邏輯。

初步計算:

<code class="language-csharp">cds_oeinvitem.itemqtyonhand - cds_oeinvitem.itemqtycommitted</code>

這個簡單的減法透過從現有庫存中扣除承諾數量來確定可用庫存。

LINQ 中等效的 SQL CASE 語句使用巢狀三元運算子:

<code class="language-csharp">osc_products.products_quantity =
    itempromoflag != "N" ? 100000 :
    (
        itemcat1.In("1", "2", "31") && itemsalestatus == "S" ? 100000 :
        itemsalestatus == "O" ? 0 :
        cds_oeinvitem.itemqtyonhand - cds_oeinvitem.itemqtycommitted
    )</code>

這個巢狀結構反映了 CASE 語句的條件邏輯。 它優先考慮條件:如果itempromoflag不為“N”,則數量為100000;否則,進入下一個條件,依此類推。

整合的 LINQ 查詢:

<code class="language-csharp">cdsDBDataContext db = new cdsDBDataContext();
var query = from items in db.cdsItems
            where items.ItemHandHeldFlag == "Y" &&
                  (
                      items.Itempromoflag != "N" ? 100000 :
                      (
                          items.Itemcat1.In("1", "2", "31") && items.Itemsalestatus == "S" ? 100000 :
                          items.Itemsalestatus == "O" ? 0 :
                          items.Itemqtyonhand - items.Itemqtycommitted
                      )
                  ) > 0
            select items;</code>

此修訂後的查詢包含條件數量分配,確保根據定義的條件準確更新庫存狀態。 僅選擇滿足 ItemHandHeldFlag 條件且結果數量大於零的項目。 這有效地複製了 LINQ 框架內 SQL CASE 語句的行為。

以上是如何在 LINQ 中實作相當於條件產品數量分配的 SQL CASE 語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn