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中文網其他相關文章!