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 句での 3 項式の使用を示しています。
<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>
以上がSQL CASE ステートメントを LINQ クエリに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。