【发布时间】:2014-07-20 14:26:59
【问题描述】:
我想将Where 扩展为这样的:.WhereEqual("Field", "SomeString") 必须等同于.Where(p => p.Field== "SomeString"),这是我的代码:
public static IQueryable<T> WhereEqual<T>(this IQueryable<T> q, string Field, string Value)
{
var param = Expression.Parameter(typeof(T), "p");
var prop = Expression.Property(param, Field);
var val = Expression.Constant(Value);
var body = Expression.Equal(prop, val);
var exp = Expression.Lambda<Func<T, bool>>(body, param);
Type[] types = new Type[] { q.ElementType, typeof(bool) };
var mce = Expression.Call(
typeof(Queryable),
"Where",
types,
exp
);
return q.Provider.CreateQuery<T>(mce);
}
感谢调试器,我可以看到 exp 设置为 {p => (p.Field== "SomeString")},但 Call 方法抛出以下异常:
“'System.InvalidOperationException' 类型的异常发生在 System.Core.dll 但未在用户代码中处理,附加 信息:“System.Linq.Queryable”类型上没有通用方法“Where” 与提供的类型参数和参数兼容。无类型 如果方法是非泛型的,则应提供参数。"
如何为Where 提供所需的参数?
谢谢。
【问题讨论】:
-
请勿转载、编辑和改进原始问题。
标签: c# linq entity-framework linq-to-entities entity-framework-6