我编写了一个查询,并想知道如何在where子句中实现if语句,以便" category_id"只有在设置了值时才能添加过滤器。如果" category_id" value为null,则不会完成该语句。基本上我在尝试通过SQL
输入时将此语句转换为切换var r = from lh in db.lh_url
where lh.category_id == clientInfo.cf.category_id
where lh.first_id >= id
where lh.first_id < (id + BatchSize)
orderby ph.url, ph.vendor, ph.product
select new
{
lh
};
答案 0 :(得分:0)
我认为你的意思是这样的:
var r = from lh in db.lh_url
where clientInfo.cf.category_id != null
&& lh.category_id == clientInfo.cf.category_id
&& lh.first_id >= id
&& lh.first_id < (id + BatchSize)
orderby ph.url, ph.vendor, ph.product
select new
{
lh
};
答案 1 :(得分:0)
如果使用扩展方法,可以叠加它们:
if (clientInfo.cf.category_id != null)
db.lh_url.Where(lh => lh.category_id == clientInfo.cf.category_id);
但是,使用内联语法,我更喜欢使用短路:
bool useCategory = clientInfo.cf.category_id != null;
var r = from lh in db.lh_url
where (!useCategory || lh.category_id == clientInfo.cf.category_Id)
....
注意:我已将布尔条件提取到变量中,因为在处理DataContext时,表达式可能会尝试将对象计算为SQL表达式,这将导致失败。
答案 2 :(得分:0)
where (lh.category_id == null || lh.category_id == clientInfo.cf.category_id)
&& lh.first_id >= id
&& lh.first_id < (id + BatchSize)