Maison >base de données >tutoriel mysql >Comment puis-je traduire efficacement les instructions SQL CASE en requêtes LINQ ?
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!