0

给定一个 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。

4

1 回答 1

1

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

于 2012-08-11T12:48:24.227 回答