將 SQL CASE 語句轉換為 LINQ:實用指南
本文解決了將 SQL CASE 語句轉換為其 LINQ 等效語句的挑戰。 使用者尋求協助來翻譯以下 SQL 片段:
<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>
提供的初始 LINQ 嘗試不足:
<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>
此查詢僅過濾資料;它沒有實作 SQL CASE 語句的邏輯。
為了更清楚地說明 LINQ 的 CASE 語句等效項,讓我們來看一個更簡單的範例:
<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>
這示範如何使用三元條件運算子 (?:
) 來模擬 CASE 語句的行為。 條件按順序進行評估,為每次匹配返回適當的值。結果是一系列匿名對象,每個對像都包含一個數字及其文字表示。 將此原則應用於原始SQL CASE 語句需要在LINQ 查詢中使用類似的巢狀條件方法,使其適應db.cdsItems
中的特定資料結構和關係,並可能與其他資料表連接以存取itempromoflag
、itemcat1
和itemsalestatus
。 如果前面的條件都不滿足,則 ELSE
條件將表示預設值。
以上是如何有效地將SQL CASE語句轉換為LINQ查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!