我将尝试编写动态代码来执行一些聚合操作,比如平均值、总和、最大值等等。
以下是我正在执行的代码:
该异常意味着你正在尝试使用错误的参数调用Average方法。请确保你正在使用正确的参数类型,并且你正在使用泛型版本的Average方法。
以下是我正在执行的代码:
PropertyInfo sortProperty = typeof(T).GetProperty("PropertyName");
ParameterExpression parameter = Expression.Parameter(typeof(T), "p");
MemberExpression propertyAccess = Expression.MakeMemberAccess(parameter, sortProperty);
LambdaExpression orderByExp = Expression.Lambda(propertyAccess, parameter);
var exp = Expression.Lambda<Func<T, int>>(propertyAccess, parameter);
var call = Expression.Call(typeof(Enumerable), "Average", new[] { typeof(IEnumerable<T>) , typeof(Func<T, int>) }, parameter);
我总是遇到这个异常:
在类型“System.Linq.Enumerable”上没有通用方法“Average”与提供的类型参数和参数兼容。如果该方法是非泛型的,则不应提供类型参数。
该异常意味着你正在尝试使用错误的参数调用Average方法。请确保你正在使用正确的参数类型,并且你正在使用泛型版本的Average方法。
T
是从哪里来的?它是一个通用参数,因此在运行时是一个具体类型吗?我怀疑你必须寻找未经过类型化的Average
方法(类似于typeof(IEnumerable<>), typeof(Func<, int>)
),然后调用MakeGenericMethod
来创建针对T
类型的版本。 - O. R. MapperCall
吗? - O. R. Mapper