Entity framework ObjectCollection.Where(o=>;o.Related==EntityObject):";无法创建常量值";

Entity framework ObjectCollection.Where(o=>;o.Related==EntityObject):";无法创建常量值";,entity-framework,linq-to-entities,Entity Framework,Linq To Entities,给定EntityObject,我希望以面向对象的方式查找所有相关项,作为数据源查询的一部分 下面的代码生成正确的输出,但会将导线上的所有行都用于此操作 Parent. // EntityObject Children. // EntityCollection Where(o => o.Gender == 'm').

给定EntityObject,我希望以面向对象的方式查找所有相关项,作为数据源查询的一部分

下面的代码生成正确的输出,但会将导线上的所有行都用于此操作

Parent.                                             // EntityObject
Children.                                           // EntityCollection
Where(o => o.Gender == 'm').                        // IEnumerable (local!)
OrderBy(o => o.Age).                                // IOrderedEnumerable
Skip(pages * pageSize).Take(pageSize);              // (Inefficient paging!)
我需要支持这样的UI(在通过网络返回结果之前,使用其他条件进行过滤、排序和分页)。我重新排序以利用Queryable:

Repository.                                         // Repository
Children.                                           // ObjectSet
Where(o => o.Parent == Parent && o.Gender == 'm').  // ObjectQuery, runtime error
OrderBy(o => o.Age).                                // IOrderedQueryable
Skip(pages * pageSize).Take(pageSize);
但这会产生错误:

无法创建“DataModel.Parent”类型的常量值。在此上下文中仅支持基本类型(“如Int32、字符串和Guid”)。

是否有一种自然的、面向对象的方式来查询这种关系,使用Linq来查询实体?或者,我是否一定要回到SQL上来


我曾一度认为这就是答案,但它不能应用于EntityObject。

我无法对我所说的内容进行测试,但我认为您会得到错误,因为EF不知道如何将o.Parent==Parent转换为SQL语句。尝试比较两个家长的ID。。
o.Parent.Id==Parent.Id

是的,很简单。谢谢我在所有扩展方法中发生的混乱的类型转换中陷入了困境。丑陋的东西。这在数据源处被转换为一个简单的外键过滤器,正如您所希望的那样,而不是任何冗余连接或任何东西。我很惊讶EF不能在数据源上检查附加实体对象的相等性。