ホームページ >データベース >mysql チュートリアル >SQL CASE ステートメントを LINQ クエリに効果的に変換するにはどうすればよいですか?

SQL CASE ステートメントを LINQ クエリに効果的に変換するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-11 19:11:41751ブラウズ

How Can I Effectively Translate SQL CASE Statements into LINQ Queries?

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 内の特定のデータ構造と関係に適応させ、場合によっては itempromoflagitemcat1、および itemsalestatus にアクセスするために他のテーブルと結合する必要があります。 ELSE

条件は、前述の条件がいずれも満たされない場合のデフォルト値を表します。

以上がSQL CASE ステートメントを LINQ クエリに効果的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。