【发布时间】:2017-06-11 17:36:57
【问题描述】:
Expression<> 遇到了一点问题。
是否可以将两个以上的表达式合并为一个? 示例:
Expression<Func<Event, bool>> searchForLogCorrelationKeyExpression =
x => string.Equals(x.LOG_CORR_KEY, model.CorrelationKey, StringComparison.CurrentCultureIgnoreCase);
Expression<Func<Event, bool>> searchForLsidExpressionExpression =
x => string.Equals(x.LOG_LSID, model.LsId, StringComparison.CurrentCultureIgnoreCase);
Expression<Func<Event, bool>> searchForLogLocationExpression =
x => string.Equals(x.LOG_LOCATION, model.LogLocation, StringComparison.CurrentCultureIgnoreCase);
Expression<Func<Event, bool>> searchForLogTypeExpression =
x => string.Equals(x.LOG_TP, model.LogType.ToString(), StringComparison.CurrentCultureIgnoreCase);
if (model.EndDateTime != null && model.StartDateTime != null)
{
Expression<Func<Event, bool>> searchForLogInDateRangeExpression =
x => model.StartDateTime <= x.LOG_TS && model.EndDateTime <= x.LOG_TS;
}
Expression<Func<Event, bool>> searchForLogByUserIdExpression =
x => string.Equals(x.LOG_USERID, model.UserId.ToString(), StringComparison.CurrentCultureIgnoreCase);
Expression<Func<Event, bool>> searchForLogByLogTextExpression =
x => string.Equals(x.LOG_TXT, model.SearchString.ToString(), StringComparison.CurrentCultureIgnoreCase);
我有 7 个表达式要合并为一个,然后将其放入接受 Expression<Func<Event, bool>> 作为参数的方法中。
有可能吗?我发现了很多组合两个表达式的示例,但它们不起作用。
【问题讨论】:
-
你试过 var body = Expression.AndAlso(expr1.Body, expr2.Body);在循环中?
-
你说的他们没有工作是什么意思。每个谓词构建器助手都可以工作 - Universal Predicate Builder、my own、著名的 PredicateBuilder 等。
-
@MistyK 据我所知,它可能只需要参数/表达式。我需要输入 7 个表达式。或者你的想法中遗漏了什么?
-
@IvanStoev 这些示例与所有其他示例一样基于两个表达式。我需要以某种方式将七个表达式合二为一。或者也许我不明白这些示例中的某些内容。
-
他们可以被锁住 -
expr1.And(expr2).And(expr3).And(expr4)...
标签: c# .net expression