我首先使用的是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
语句。
有没有办法可以解决这个问题?
答案 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);
}