首页 > 数据库 > mysql教程 > 如何将 SQL CASE 语句转换为 LINQ 查询?

如何将 SQL CASE 语句转换为 LINQ 查询?

Mary-Kate Olsen
发布: 2025-01-11 19:06:44
原创
632 人浏览过

How to Convert SQL CASE Statements to LINQ Queries?

LINQ 中的 CASE 语句:理解与实现

LINQ 中的 CASE 语句允许开发人员评估多个条件,并根据结果分配特定值。它们通常用于数据转换和操作。

将复杂的 CASE 语句转换为 LINQ

让我们考虑原始问题中提供的 CASE 语句:

<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>
登录后复制

此语句根据各种条件为 osc_products 表的 products_quantity 字段分配特定值。要将其转换为 LINQ,我们可以使用以下语法:

<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>
登录后复制

理解 LINQ 转换

此 LINQ 语句投影一个新的匿名类型,其中包含现有的 products_quantity 字段和附加属性,用于保存条件表达式的布尔值。然后,它使用嵌套的 Select 操作根据条件分配计算出的 products_quantity 值。

简单的 CASE 语句示例

提供的将简单 CASE 语句转换为 LINQ 的代码示例演示了在 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>
登录后复制

此语句使用三元表达式根据数字的值为其分配不同的文本值。三元表达式的语法为:

<code class="language-csharp">condition ? true_expression : false_expression</code>
登录后复制

这些示例说明了如何将 CASE 语句转换为 LINQ,提供了一种简洁且易于维护的方法来评估条件并将值分配给您的数据。

以上是如何将 SQL CASE 语句转换为 LINQ 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板