首頁 >資料庫 >mysql教程 >如何將 SQL CASE 語句轉換為 LINQ 查詢?

如何將 SQL CASE 語句轉換為 LINQ 查詢?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-11 19:06:44636瀏覽

How to Convert SQL CASE Statements to LINQ Queries?

LINQ 中的 CASE 語句:理解與實作

LINQ 中的 CASE 語句可讓開發人員評估多個條件,並根據結果指派特定值。它們通常用於資料轉換和操作。

將複雜的 CASE 語句轉換為 LINQ

讓我們考慮原始問題中提供的 CASE 語句:

<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>

此語句根據各種條件為 osc_products 表的 products_quantity 欄位指派特定值。要將其轉換為 LINQ,我們可以使用以下語法:

<code class="language-csharp">var productsQuantity = 
    osc_products
    .Select(x => new
    {
        x.products_quantity,
        ItemPromoFlag = x.itempromoflag != "N",
        ItemCategory1 = new[] { "1", "2", "31" }.Contains(x.itemcat1),
        ItemSaleStatus = x.itemsalestatus == "S",
        AvailableQuantity = x.itemqtyonhand - x.itemqtycommitted
    })
    .Select(x => x.products_quantity = 
        x.ItemPromoFlag ? 100000 :
        (x.ItemCategory1 && x.ItemSaleStatus) ? 100000 :
        x.itemsalestatus == "O" ? 0 :
        x.AvailableQuantity
    );</code>

理解 LINQ 轉換

此 LINQ 語句投影一個新的匿名類型,其中包含現有的 products_quantity 欄位和附加屬性,用於保存條件表達式的布林值。然後,它使用嵌套的 Select 操作根據條件分配計算出的 products_quantity 值。

簡單的 CASE 語句範例

提供的將簡單 CASE 語句轉換為 LINQ 的程式碼範例示範了在 Select 子句中使用三元表達式的用法:

<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>

此語句使用三元表達式根據數字的值為其分配不同的文字值。三元表達式的語法為:

<code class="language-csharp">condition ? true_expression : false_expression</code>

這些範例說明如何將 CASE 語句轉換為 LINQ,提供了一種簡潔且易於維護的方法來評估條件並將值指派給您的資料。

以上是如何將 SQL CASE 語句轉換為 LINQ 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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