c# - 如何检查谓词表达式是否已更改?

标签 c# asp.net-mvc linq predicatebuilder linqkit

 var predicate = PredicateBuilder.True<o_order>();

这是我的谓词表达式,在某些特定条件下我会附加表达式。

同样

 if (!string.IsNullOrEmpty(param.sSearch))
                predicate = predicate.And(s => s.OrderID.ToString().Contains(param.sSearch));

现在我的问题是如果这个表达式没有通过这个条件那么会有任何表达式吗?我怎么知道它是否不返回任何表达式。

只是我想做-

if(predicate==null)if(predicate 不包含表达式)

最佳答案

我发现 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")

虽然我还没有尝试过。

关于c# - 如何检查谓词表达式是否已更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31046905/

相关文章:

c# - 使用 XMLDocument VB.NET 构建 SOAP 消息

c# - .NET 会停止调试运行finally block 中的代码吗?

c# - 使用实例成员发布尖锐

c# - 如何通过网络请求取消异步任务?

asp.net-mvc - 绑定(bind)到 ViewModel 时如何更新模型?

LINQ 错误 Group by sum 上的列名无效

c# - 可以在 C# 和 LINQ Lambda 表达式中使用 "in"类型语句吗?

C#多线程自增

c# - 如何在不同型号的 Controller 之间共享代码?

.net - 使用 XLINQ 解析 XHTML 文件的库