我发现该IsStarted
属性似乎显示是否已分配谓词。
在我的代码中,我使用它来构建搜索参数是可选的复合搜索语句。例如
var quoteDatePredicate= PredicateBuilder.New<SearchData>();
if (searchCriteria.QuoteFromDate.HasValue)
{
quoteDatePredicate.And(x => x.QuoteDate >= searchCriteria.QuoteFromDate);
}
var saleDatePredicate = PredicateBuilder.New<SearchData>();
if (searchCriteria.SaleDate.HasValue)
{
saleDatePredicate.And(x => x.SaleDate >= searchCriteria.SaleDateFrom);
}
然后我创建另一个谓词变量并使用If
语句添加实际分配给的任何谓词:
var datesPredicate = PredicateBuilder.New<SearchData>();
if (quoteDatePredicate.IsStarted) datesPredicate.Or(quoteDatePredicate);
if (saleDatePredicate.IsStarted) datesPredicate.Or(saleDatePredicate);
到目前为止,这似乎在我的代码中运行良好。
或者,比较调试器中已分配和未分配的谓词变量似乎建议您可以使用它来检查是否已分配谓词:
if (dueOutOfDatePredicate.Parameters[0].Name = "f")
我还没有尝试过。