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中文网其他相关文章!