c# - 无效操作异常 : No method 'Where' on type 'System.Linq.Queryable' is compatible with the supplied arguments

标签 c# linq linqpad

(以下代码已更新并正常运行)

有来自 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/

相关文章:

c# - 使用 C# 为 linqpad 创建 DynamicDataContextDriver

c# - : MongoDB. Driver.MongoConnectionException:打开与服务器的连接时发生异常

c# - 如何在 DataGridView 中创建类似 excel 的搜索?

c# - 不能将 Enumerable.Count 与 List 一起使用,编译器假定 List.Count

c# - 在 SelectMany 方面需要一些帮助

c# - 如何使用拆分操作执行 LINQ 查询

c# - 如何在不使用 OrderBy 的情况下从点数组中获取具有最小 X 的点?

MySQL - 搜索 1 个表中的缺失值

c# - 使用 LINQPad 查询包含嵌套元素的 XML 文件?

c# 如何避开内存分配瓶颈以提高多线程性能