兼容(下面的代碼已被更新和工作正常)出現InvalidOperationException:沒有方法「去哪兒」上鍵入「System.Linq.Queryable」與提供的參數
有來自LinqPad動態排序依據樣本。我想要做的只是簡單地將'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’是與提供的參數兼容。」
任何幫助評估。
乾杯
嗨,喬恩,謝謝你的回覆。您提供的表達式抱怨 「二進制運算符GreaterThan未針對類型'System.Decimal'和'System.Int32'進行定義。」 – Zalan 2010-08-06 13:13:55
啊。你沒有清楚表明'價格'是一個小數。我懷疑最簡單的解決辦法是將100米改爲100米。 – 2010-08-06 13:20:47