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