【发布时间】:2012-01-31 05:48:29
【问题描述】:
我有一个扩展方法如下:
public static bool SatisfiesSomeCondition(this Post post, SomeObj someObj)
{
return post.SomeObjId == someObj.SomeObjId;
}
我正在尝试这样使用它:
var query = ctx.Posts.Where(p => p.SatisfiesSomeCondition(someObj)).ToList();
但我得到了错误:
LINQ to Entities 无法识别方法 'Boolean SatisfiesSomeCondition(xx.xx.xx.Post, xx.xx.xx.SomeObj)' 方法,并且该方法无法转换为存储表达式。
如果我将查询更改为:
var query = ctx.Posts.Where(p => p.SomeObjId == someObj.SomeObjId).ToList();
与方法相同。
它工作正常,并执行预期的 T-SQL。
为什么我的第一个查询不起作用?是静态方法,不知道怎么创建表达式树? (例如 WHERE 过滤器)。当然我不必先实现查询? (这意味着我不希望通过网络返回的记录,并且我在这里进行分页/排序,所以这不是一个选项)。
当然,我可以选择可行的方法(例如上述方法),但方法 SatisfiesSomeCondition 是跨域使用的现有方法,我想重复使用该功能,而不是复制它。
有什么想法吗?
【问题讨论】:
标签: c# entity-framework linq-to-entities entity-framework-4.1 extension-methods