LINQ where子句C#中的If语句



我写了一个查询,想知道如何在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)

相关内容

  • 没有找到相关文章

最新更新