LINQ where子句C#中的If语句
本文关键字:If 语句 中的 where 子句 LINQ | 更新日期: 2023-09-27 17:58:38
我写了一个查询,想知道如何在where子句中实现if语句,以便只有在设置了值的情况下才能添加"category_id"筛选器。如果"category_id"值为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
};
如果您使用扩展方法,您可以堆叠它们:
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表达式,这将导致失败
我想你的意思是这样的:
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
};
where (lh.category_id == null || lh.category_id == clientInfo.cf.category_id)
&& lh.first_id >= id
&& lh.first_id < (id + BatchSize)