【问题标题】:linq search functionality skip where clause if null?如果为空,linq 搜索功能会跳过 where 子句吗?
【发布时间】:2015-01-19 01:33:55
【问题描述】:

如果 LINQ 中的典型值为 null,如何跳过 where 语句?这是针对用户输入空值而不是 LINQ 不会对该列执行查询的搜索功能。

我记得我看到了一个直接的功能,但我忘记了那是什么子句。给出的示例不需要为每个 where 语句显式检查 null。

类似的东西。但我忘记了应该为 where 子句替换什么函数。如果在哪里?哪里来的?

  db.Table1.Where(x=> x.Column1 == value1)
           .Where(x => x.Column2 == value2)

【问题讨论】:

    标签: asp.net-mvc linq linq-to-entities


    【解决方案1】:

    WhereIf 应该这样做。看看这里:

    这应该对你有帮助:http://extensionmethod.net/csharp/ienumerable-t/whereif

    也看看这个答案:How to use whereif in LINQ

    将您的数据表更改为 IQueryable:

    db.Table1.AsEnumerable().AsQueryable()...

    【讨论】:

    • 是的,我在想 whereif,但智能感知并没有告诉我 whereif。 whereif 子句是用户自己扩展的,还是 linq to sql 或 linq to object?
    【解决方案2】:

    如果存在您不想对发送到数据库的查询应用过滤器的条件,则不要在其上调用 Where。

    var query = db.Table1.AsQueryable();
    if (value1 != null)
      query = query.Where(x=> x.Column1 == value1);
    if (value2 != null)
      query = query.Where(x=> x.Column2 == value2);
    
    return query.ToList();
    

    如果value 是一个字符串,你可以测试string.IsNullOrEmpty(value)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      • 2017-11-03
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多