Maison >base de données >tutoriel mysql >Comment convertir des instructions SQL CASE en requêtes LINQ ?

Comment convertir des instructions SQL CASE en requêtes LINQ ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-11 19:06:44682parcourir

How to Convert SQL CASE Statements to LINQ Queries?

Instruction CASE dans LINQ : compréhension et mise en œuvre

L'instruction CASE dans LINQ permet aux développeurs d'évaluer plusieurs conditions et d'attribuer des valeurs spécifiques en fonction des résultats. Ils sont couramment utilisés pour la transformation et la manipulation de données.

Convertir les instructions CASE complexes en LINQ

Considérons la déclaration CASE fournie dans la question initiale :

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

Cette instruction attribue des valeurs spécifiques au champ products_quantity de la table osc_products en fonction de diverses conditions. Pour le convertir en LINQ, nous pouvons utiliser la syntaxe suivante :

<code class="language-csharp">var productsQuantity = 
    osc_products
    .Select(x => new
    {
        x.products_quantity,
        ItemPromoFlag = x.itempromoflag != "N",
        ItemCategory1 = new[] { "1", "2", "31" }.Contains(x.itemcat1),
        ItemSaleStatus = x.itemsalestatus == "S",
        AvailableQuantity = x.itemqtyonhand - x.itemqtycommitted
    })
    .Select(x => x.products_quantity = 
        x.ItemPromoFlag ? 100000 :
        (x.ItemCategory1 && x.ItemSaleStatus) ? 100000 :
        x.itemsalestatus == "O" ? 0 :
        x.AvailableQuantity
    );</code>

Comprendre la conversion LINQ

Cette instruction LINQ projette un nouveau type anonyme qui contient le champ products_quantity existant et des propriétés supplémentaires contenant la valeur booléenne de l'expression conditionnelle. Il utilise ensuite une opération Select imbriquée pour attribuer de manière conditionnelle la valeur products_quantity calculée.

Exemple d'instruction CASE simple

L'exemple de code fourni pour convertir une simple instruction CASE en LINQ démontre l'utilisation d'expressions ternaires dans une clause Select :

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

Cette instruction utilise une expression ternaire pour attribuer une valeur de texte différente à un nombre en fonction de sa valeur. La syntaxe de l'expression ternaire est :

<code class="language-csharp">condition ? true_expression : false_expression</code>

Ces exemples illustrent comment convertir les instructions CASE en LINQ, fournissant un moyen concis et facile à gérer pour évaluer les conditions et attribuer des valeurs à vos données.

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