【发布时间】:2011-11-24 12:47:59
【问题描述】:
我已经使用 Lambda 表达式构建了一个存储库来过滤我的实体集合。作为我发送Expression<Func<Case, bool>> exp 的方法的参数。但在方法内部,我想用一些全局过滤器更新相同的表达式。我可以看到表达式对象本身有一个 Update 方法,但我不知道它是如何实现的(并且在搜索网络时找不到任何东西)。
exp.Update(exp.Body, ???);
谁能举个例子?
编辑:方法定义:http://msdn.microsoft.com/en-us/library/ee378255.aspx
EDIT2:这是我的代码(我尝试使用 .And):
Expression<Func<Case, bool>> newExp = c => c.CaseStatusId != (int)CaseStatus.Finished
var binExp = Expression.And(exp.Body, newExp.Body);
ParameterExpression paramExp = Expression.Parameter(typeof(Expression<Func<Case, bool>>), "c");
return repository.Where(Expression.Lambda<Expression<Func<Case, bool>>>(binExp,
new[] { paramExp }).Compile()).ToArray();
失败并出现以下 ArgumentException:Lambda 类型参数必须从 System.Delegate 派生
【问题讨论】:
-
注意:
Expression(Of TDelegate)是 VB 语法。在documentation page 的顶部,您可以切换到 C#。
标签: c# lambda expression