我正在使用 LinqKit 的PrediateBuilder 类构建谓词来动态设置过滤器,并且我想将嵌套的一个组合到另一个。
我读过这个(http://www.albahari.com/nutshell/predicatebuilder.aspx):
这是我的代码:
// The main predicate.
var mainPredicate = PredicateBuilder.True<Document>();
// ... some other conditions to the main predicate here ...
// The inner predicate (combined conditions using OR).
var innerPredicate = PredicateBuilder.False<Document>();
foreach (var period in periods)
{
var p = period;
innerPredicate =
innerPredicate.Or(
d =>
(d.Date >= p.DateFrom && d.Date <= p.DateTo));
}
mainPredicate = mainPredicate.And(innerPredicate);
documents = this.ObjectSet.AsExpandable().Where(mainPredicate).ToList();
我正在组合我的两个谓词,就像文档中解释的那样。但是,我得到了这个例外:
参数“f”未绑定在指定的 LINQ to Entities 查询表达式中
我首先认为在将内部谓词与主谓词组合之前必须对其进行扩展,因此我更改了组合代码以添加对内部谓词的Expand
方法的调用,如下所示:
mainPredicate = mainPredicate.And(innerPredicate.Expand());
但我得到了完全相同的例外。
我的代码与文档的唯一区别是我使用foreach
循环动态构建嵌套谓词。我只是不知道它如何对结果表达式产生负面影响。
我的代码有什么问题?
我该如何实际调试呢?
f参数来自哪里?它是如何产生的?为什么我的情况有问题?
是否有某种表达式树可视化工具可以帮助我真正了解生成的表达式有什么问题?因为表达式的主体很难阅读。