Entity framework ObjectCollection.Where(o=>;o.Related==EntityObject):";无法创建常量值";
给定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').
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不能在数据源上检查附加实体对象的相等性。