linq案件陈述

Sco*_*mer 45 c# sql linq

我需要帮助linq(c#)中的CASE语句:

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  
Run Code Online (Sandbox Code Playgroud)

我开始转换为linq,(我还在学习):

cdsDBDataContext db = new cdsDBDataContext();
  var query = from items in db.cdsItems
              where items.ItemHandHeldFlag.Equals("Y") && 
              items.ItemQtyOnHand -  items.ItemQtyCommitted > 0
  select items;
Run Code Online (Sandbox Code Playgroud)

此查询将库存状态从生产更新为商业站点.

小智 103

如果它只是你在LINQ中CASE语句(阅读你的评论)那么这个例子就是......

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"
        )
    }
);
Run Code Online (Sandbox Code Playgroud)


Sco*_*mer 5

这是我到目前为止的进展,还没有发挥作用,但这是一个开始:

var query2 = from items in db.cdsItems
             where items.ItemTrackingCode.Equals("A") && (items.ItemQtyOnHand - items.ItemQtyCommitted) > 0
             select new  {
                           items,
                           qty =
                                 (
                                    items.ItemPromoFlag.Equals("1") ? "100000" :
                                    items.ItemCat1.Equals("1") ? "100000" :
                                    items.ItemSaleStatus.Equals("O") ? "0" :
                                    (items.ItemQtyOnHand - items.ItemQtyCommitted).ToString
                                 )
                         };
Run Code Online (Sandbox Code Playgroud)

这种语法对我来说似乎很尴尬......我可能只是传递sql。