Maison >base de données >tutoriel mysql >Comment puis-je traduire efficacement les instructions SQL CASE en requêtes LINQ ?

Comment puis-je traduire efficacement les instructions SQL CASE en requêtes LINQ ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-11 19:11:41749parcourir

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

Traduction des instructions SQL CASE en LINQ : un guide pratique

Cet article aborde le défi de la conversion des instructions SQL CASE en leurs équivalents LINQ. Un utilisateur a demandé de l'aide pour traduire l'extrait SQL suivant :

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

La tentative initiale de LINQ fournie était insuffisante :

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

Cette requête filtre uniquement les données ; il n'implémente pas la logique de l'instruction SQL CASE.

Pour une illustration plus claire de l'équivalent de l'instruction CASE de LINQ, examinons un exemple plus simple :

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

Cela démontre l'utilisation de l'opérateur conditionnel ternaire (?:) pour imiter le comportement d'une instruction CASE. Les conditions sont évaluées séquentiellement, renvoyant la valeur appropriée pour chaque correspondance. Le résultat est une séquence d'objets anonymes, chacun contenant un numéro et sa représentation textuelle. L'application de ce principe à l'instruction SQL CASE d'origine nécessite une approche conditionnelle imbriquée similaire dans la requête LINQ, en l'adaptant à la structure de données et aux relations spécifiques au sein de db.cdsItems et en la joignant potentiellement à d'autres tables pour accéder à itempromoflag, itemcat1 et itemsalestatus. La condition ELSE représenterait la valeur par défaut si aucune des conditions précédentes n'est remplie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn