我需要帮助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
我开始转换为linq,(我还在学习):
cdsDBDataContext db = new cdsDBDataContext(); var query = from items in db.cdsItems where items.ItemHandHeldFlag.Equals("Y") && items.ItemQtyOnHand - items.ItemQtyCommitted > 0 select items;
此查询将库存状态从生产更新为商业网站。
答案 0 :(得分:100)
如果它只是 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"
)
}
);
答案 1 :(得分:3)
到目前为止,这是我的进展,还没有完成任务,但这是一个开始:
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
)
};
这种语法对我来说似乎很尴尬......我可能只是通过sql。
答案 2 :(得分:1)
首先,选择要更新的项目。然后,在常规C#中更新它们。提交更改。
var q = from osc in MyDataContext.osc_products
join cds in cds_oeinvitem on osc.products_model equals cds.itemno into p
where osc.Itemwebflag == 'Y'
select p;
foreach (var item in q)
{
if (item.itempromoflag != "N")
item.products_quantity = 100000;
else if ((new[] { 1, 2, 31 }.Contains(item.itemcat1)) && (item.itemsalestatus == 'S'))
item.products_quantity = 100000;
else if (item.itemsalestatus == 0)
item.products_quantity = 0;
else
item.products_quantity = item.itemqtyonhand - item.itemqtycommitted;
}
MyDataContext.SubmitChanges();
答案 3 :(得分:1)
在存储过程中使用单个UPDATE语句,比在应用程序服务器上执行更新循环更好。
答案 4 :(得分:1)
答案 5 :(得分:0)
您正在执行批量更新,但链接纯粹是查询和对象选择工具。使用适当的工具...在这种情况下肯定是数据库服务器。
答案 6 :(得分:0)
Linq中没有“更新”声明(无论你使用哪种口味,无论是LinqToSQL还是LinqToEntities)。
Linq严格提供查询语言。
如果您正在使用LinqToSQL并且想要更新数据,则需要首先查询需要更新的项的上下文,然后循环它们以更改其属性,最后调用SubmitChanges以将更改保存到数据库。