我需要帮助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,(我还在学习):
Run Code Online (Sandbox Code Playgroud)cdsDBDataContext db = new cdsDBDataContext(); var query = from items in db.cdsItems where items.ItemHandHeldFlag.Equals("Y") && items.ItemQtyOnHand - items.ItemQtyCommitted > 0 select items;
此查询将库存状态从生产更新为商业站点.
小智 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)
这是我到目前为止的进展,还没有发挥作用,但这是一个开始:
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。