在 LINQ 中复制 SQL CASE 语句以进行动态产品数量分配
本文演示了如何将 SQL CASE 语句的功能转换为 LINQ,专门解决基于各种条件有条件分配产品数量的挑战。 我们将修改现有代码以合并此逻辑。
初步计算:
<code class="language-csharp">cds_oeinvitem.itemqtyonhand - cds_oeinvitem.itemqtycommitted</code>
这个简单的减法通过从现有库存中扣除承诺数量来确定可用库存。
LINQ 中等效的 SQL CASE 语句使用嵌套三元运算符:
<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>
这种嵌套结构反映了 CASE 语句的条件逻辑。 它优先考虑条件:如果itempromoflag
不为“N”,则数量为100000;否则,进入下一个条件,依此类推。
集成的 LINQ 查询:
<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>
此修订后的查询包含条件数量分配,确保根据定义的条件准确更新库存状态。 仅选择满足 ItemHandHeldFlag
条件且结果数量大于零的项目。 这有效地复制了 LINQ 框架内 SQL CASE 语句的行为。
以上是如何在 LINQ 中实现相当于条件产品数量分配的 SQL CASE 语句?的详细内容。更多信息请关注PHP中文网其他相关文章!