if语句在LINQ where子句C#

时间:2016-07-26 19:34:52

标签: c# linq if-statement

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

3 个答案:

答案 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)