【发布时间】:2017-05-20 23:25:59
【问题描述】:
我想形成一个类似的 Linq 表达式树
listInstance.Exists(c=>c.Age=-40)
我已经写了代码,但是调用Expression.Call方法时,它抛出了一个错误。
我写的代码在这里,
private static string GetExprString<T>(List<Student> listInstance,int valueExpr){
var methodInfo = typeof(List<Student>).GetMethod("Exists",new Type[] { typeof(Predicate<Student>)});
var parameter = Expression.Parameter(typeof(Student), "c");
var masterProperty = Expression.Property(parameter, typeof(Student).GetProperty("Age"));
var slInstance = Expression.Constant(sList);
var expr = Expression.Equal(masterProperty, Expression.Constant(valueExpr));
e1 = Expression.Lambda(expr, new ParameterExpression[] {parameter });
var left = Expression.Call(slInstance, methodInfo, e1);
return string.empty;
}
【问题讨论】:
-
您是否尝试创建一个名为 Exists 的新扩展方法?
-
不,我正在尝试使用表达式树在 List 类中使用 Exists 方法
-
@KannanSrinivasan:为什么?您想在这里完成哪些现有方法无法完成的任务?为什么不使用现有的
.Exists(),甚至是简单的LINQ.Any()? -
为什么要手动构建
Expression而不仅仅是传递一个 lambda?您使用这种方法有什么特别的原因吗?正如您所发现的,它要复杂得多。 -
感谢您的回复。我正在尝试构建一个业务规则引擎,它将动态构建规则并验证对象
标签: c# linq tree expression