作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
(以下代码已更新并正常运行)
有来自 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’与提供的参数不兼容。”
任何帮助都是值得的。
干杯
最佳答案
我觉得你的 lambda 表达式创建很奇怪。您无缘无故地添加了另一个参数。您还在使用 Predicate<Purchase>
而不是 Func<Purchase, bool>
.试试这个:
LambdaExpression lambda = Expression.Lambda<Func<Purchase, bool>>(
Expression.GreaterThan(member, Expression.Constant(100)),
purchaseParam);
关于c# - 无效操作异常 : No method 'Where' on type 'System.Linq.Queryable' is compatible with the supplied arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3423270/
我是一名优秀的程序员,十分优秀!