如何使用LINQ中的条件重写此内容?
如果selectID = 0,我希望它运行:
var products = from p in product.Table
orderby p.Name
where (p.stock == stockId)
select p;
如果selectID不为零,我希望它运行:
var products = from p in product.Table
orderby p.Name
where (p.stock == stockId) &&
(p.Id == selectID)
select p;
以下是有效的,但我必须使用"虚拟"第二个条件(p.hidden == false) 为三元运算符工作:
var products = from p in product.Table
orderby p.Name
where (p.stock == stockId) &&
(selectID != 0 ? p.Id == selectID : p.hidden == false)
select p;
有没有办法摆脱(p.hidden == false),因为它在逻辑中不是必需的,只是让操作员工作。感谢
答案 0 :(得分:6)
您可以使用与记录相同的Id作为后备值:
var products = from p in product.Table
orderby p.Name
where p.stock == stockId &&
p.Id == (selectID == 0 ? p.Id : selectID)
select p;
但是,由于这可能会导致查询计划效率降低,我只会使用if-else
:
var products = product.Table.Where(p => p.stock == stockId);
if(selectID != 0)
products = products.Where(p => p.Id == selectID);
products = products.OrderBy(p=> p.Name);
答案 1 :(得分:2)
您也可以这样写:
var products = from p in product.Table
orderby p.Name
where (p.stock == stockId) &&
(p.Id == selectID || selectID == 0)
select p;
如果未提供ID,|| selectID == 0
只返回true,并且仍允许查询按预期运行。以下链接是我学习这个简单技巧的方法。