将谓词放在变量中

时间:2015-03-05 02:21:26

标签: entity-framework linq-to-entities

我首先使用的是Entity Framework代码,我的代码如下:

var foos = context.Foos.Where(f => f.Bar == "Hello World").ToList();

使用SQL分析器,我发现对数据库运行的脚本包含WHERE语句,如预期的那样。

但是当我将Where谓词放在变量中时:

Func<Foo, bool> predicate = f => f.Bar == "Hello World");
var foos = context.Foos.Where(predicate).ToList();

生成的SQL命令不再包含WHERE语句。

有没有办法可以解决这个问题?

2 个答案:

答案 0 :(得分:1)

更改为Expression<Func<Foo, bool>>

Expression<Func<Foo, bool>> predicate = f => f.Bar == "Hello World";

答案 1 :(得分:0)

LinqKit可以解决这类问题。 It can be obtained by nuget.

关于使用PredicateBuilder的{​​{1}}的示例。

LinqKit

如何运作

IQueryable<Product> SearchProducts (params string[] keywords)
{
  var predicate = PredicateBuilder.False<Product>();

  foreach (string keyword in keywords)
  {
    string temp = keyword;
    predicate = predicate.Or (p => p.Description.Contains (temp));
  }
  return dataContext.Products.Where (predicate);
}