我使用Lambda表达式构建了一个仓库来过滤我的实体集合。作为该方法的参数,我发送了Expression<Func<Case, bool>> exp
。但是,在方法内部,我希望使用一些全局过滤器更新同一表达式。我可以看到表达式对象本身有一个Update方法,但我无法弄清它是如何实现的(在搜索网络时找不到任何信息)。
exp.Update(exp.Body, ???);
有人能给一个例子吗?
编辑:方法的定义:http://msdn.microsoft.com/en-us/library/ee378255.aspx
编辑2:这是我的代码(我尝试使用.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();
它会出现以下参数异常:Lambda类型参数必须派生自System.Delegate。
Expression(Of TDelegate)
是VB语法。在文档页面的顶部,您可以切换到C#。 - Olivier Jacot-Descombes