(下面的代码已更新并且可以正常工作)
LinqPad 有动态 OrderBy 示例。我想做的只是简单地对此示例应用“Where”而不是“OrderBy”。这是我的代码:
IQueryable query =
from p in Purchases
//where p.Price > 100
select p;
string propToWhere = "Price";
ParameterExpression purchaseParam = Expression.Parameter (typeof (Purchase), "p");
MemberExpression member = Expression.PropertyOrField (purchaseParam, propToWhere);
Expression<Func<Purchase, bool>> lambda = p => p.Price < 100;
lambda.ToString().Dump ("lambda.ToString");
//Type[] exprArgTypes = { query.ElementType, lambda.Body.Type };
Type[] exprArgTypes = { query.ElementType };
MethodCallExpression methodCall =
Expression.Call (typeof (Queryable), "Where", exprArgTypes, query.Expression, lambda);
IQueryable q = query.Provider.CreateQuery (methodCall);
q.Dump();
q.Expression.ToString().Dump("q.Expression");
此代码出现异常:
“InvalidOperationException:类型“System.Linq.Queryable”上的方法“Where”与提供的参数不兼容。”
任何帮助表示赞赏。
Cheers
你的 lambda 表达式创建对我来说看起来很奇怪。您无缘无故地添加了另一个参数。您也在使用Predicate<Purchase>
代替Func<Purchase, bool>
。尝试这个:
LambdaExpression lambda = Expression.Lambda<Func<Purchase, bool>>(
Expression.GreaterThan(member, Expression.Constant(100)),
purchaseParam);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)