【发布时间】:2016-01-12 05:09:03
【问题描述】:
我只是尝试使用 Linq.Expression 制作如下相同的表达式:
Expression<Func<Organization, bool>> expression = @org =>
@org.OrganizationFields.Any(a =>
a.CustomField.Name == field.Name &&
values.Contains(a.Value));
在上面的示例中,我有一个名为 Organization 的实体,它有一个名为 OrganizationsFields 作为 IEnumerable 的属性,我想找到与 Any 参数表达式匹配的任何匹配项。
我只是使用下面的代码来动态生成表达式:
string[] values = filter.GetValuesOrDefault();
ParameterExpression parameter = Expression.Parameter(typeof(T), "org");
Expression organizationFields = Expression.Property(parameter, "OrganizationFields");
MethodInfo any = typeof(Enumerable)
.GetMethods()
.FirstOrDefault(a => a.Name == "Any" && a.GetParameters().Count() == 2)
.MakeGenericMethod(typeof(OrganizationField));
Func<OrganizationField, bool> functionExpression = a =>
a.CustomField.Name == filter.Name && values.Contains(a.Value);
Expression functionParam = Expression.Constant(
functionExpression,
typeof(Func<OrganizationField, bool>));
Expression call = Expression.Call(organizationFields, any, functionParam);
return Expression.Lambda<Func<T, bool>>(call, parameter);
当我调用方法 Expression.Call 时会出现问题,它会抛出 ArgumentExeption
谁能帮帮我?
问候
【问题讨论】:
-
能否提供有关异常的详细信息,例如消息?
-
还有,在这种情况下
T是什么,你能显示方法签名吗?
标签: c# linq reflection expression