我正在尝试使用表达式树创建动态查询,以匹配以下语句:
var items = data.Where(i => i.CoverageType == 2).Select(i => i.LimitSelected);
我可以创建where方法并从中获取结果,但是我无法创建select方法。
以下是我的where方法:
var parm = Expression.Parameter(typeof(BaseClassData), "baseCoverage");
var queryData = data.AsQueryable();
var left = Expression.Property(parm, "CoverageType");
var right = Expression.Constant(2m);
var e1 = Expression.Equal(left, right);
var whereMethod = Expression.Call(
typeof(Queryable),
"Where",
new Type[] { queryData.ElementType },
queryData.Expression,
Expression.Lambda<Func<BaseClassData, bool>>(e1, new ParameterExpression[] { parm }));
我正在使用以下方法进行选择:
var selectParm = Expression.Property(parm, "LimitSelected");
var selectMethod = Expression.Call(
typeof(Enumerable),
"Select",
new Type[]{typeof(BaseClassData), typeof(decimal)},
whereMethod,
Expression.Lambda<Func<BaseClassData, decimal>>(selectParm, new ParameterExpression[]{ parm})
);
运行代码时出现以下错误:
我也尝试将 Enumerable 更改为 Queryable,但仍然出现相同的错误。在类型为 'System.Linq.Enumerable' 的类型上没有泛型方法 'Select' 与提供的类型参数和参数兼容。如果该方法是非泛型的,则不应提供类型参数。