Maison >base de données >tutoriel mysql >Comment implémenter une instruction SQL CASE équivalente dans LINQ pour l'attribution conditionnelle de quantité de produit ?

Comment implémenter une instruction SQL CASE équivalente dans LINQ pour l'attribution conditionnelle de quantité de produit ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-11 19:22:42935parcourir

How to Implement a SQL CASE Statement Equivalent in LINQ for Conditional Product Quantity Assignment?

Réplication des instructions SQL CASE dans LINQ pour l'allocation dynamique de quantité de produit

Cet article montre comment traduire la fonctionnalité d'une instruction SQL CASE en LINQ, en abordant spécifiquement le défi de l'attribution conditionnelle de quantités de produits en fonction de divers critères. Nous modifierons le code existant pour intégrer cette logique.

Le calcul initial :

<code class="language-csharp">cds_oeinvitem.itemqtyonhand - cds_oeinvitem.itemqtycommitted</code>

Cette simple soustraction détermine le stock disponible en déduisant les quantités engagées du stock disponible.

L'équivalent de l'instruction SQL CASE dans LINQ utilise des opérateurs ternaires imbriqués :

<code class="language-csharp">osc_products.products_quantity =
    itempromoflag != "N" ? 100000 :
    (
        itemcat1.In("1", "2", "31") && itemsalestatus == "S" ? 100000 :
        itemsalestatus == "O" ? 0 :
        cds_oeinvitem.itemqtyonhand - cds_oeinvitem.itemqtycommitted
    )</code>

Cette structure imbriquée reflète la logique conditionnelle d'une instruction CASE. Il priorise les conditions : si itempromoflag n'est pas « N », la quantité est 100000 ; sinon, il passe à la condition suivante, et ainsi de suite.

La requête LINQ intégrée :

<code class="language-csharp">cdsDBDataContext db = new cdsDBDataContext();
var query = from items in db.cdsItems
            where items.ItemHandHeldFlag == "Y" &&
                  (
                      items.Itempromoflag != "N" ? 100000 :
                      (
                          items.Itemcat1.In("1", "2", "31") && items.Itemsalestatus == "S" ? 100000 :
                          items.Itemsalestatus == "O" ? 0 :
                          items.Itemqtyonhand - items.Itemqtycommitted
                      )
                  ) > 0
            select items;</code>

Cette requête révisée intègre l'attribution conditionnelle de quantité, garantissant que l'état du stock est mis à jour avec précision en fonction des critères définis. Seuls les articles répondant à la condition ItemHandHeldFlag et ayant une quantité résultante supérieure à zéro sont sélectionnés. Cela reproduit efficacement le comportement d'une instruction SQL CASE dans le framework LINQ.

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