linq搜索功能如果为null则跳过where子句?

时间:2015-01-19 01:33:56

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

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

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

像这样的东西。但我忘了应该替换where子句的功能。 WhereIf? WhereIff?

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

2 个答案:

答案 0 :(得分:1)

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

这可以帮助您:http://extensionmethod.net/csharp/ienumerable-t/whereif

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

将数据表更改为IQueryable:

db.Table1.AsEnumerable()。AsQueryable已()...

答案 1 :(得分:0)

如果出现条件,您不希望对发送到数据库的查询应用过滤器,那么请不要在其上调用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)