给定一个 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、String 和 Guid”)。
是否有一种自然的、面向对象的方式来查询这种关系,使用 Linq to Entities?或者我是否必须为此回退到 SQL?
我想了一会儿CreateSourceQuery将成为答案,但它不能应用于 EntityObject。