【发布时间】:2011-06-24 15:42:34
【问题描述】:
我首先使用实体框架代码并遇到了一个小障碍。我有一个这样定义的“人”类:
public class Person
{
public Guid Id { get; set; }
public virtual ICollection<History> History { get; set; }
}
以及这样定义的“历史”类:
public class History
{
public Guid Id { get; set; }
public virtual Person Owner { get; set; }
public DateTime OnDate { get; set; }
}
但是,当我打电话时:
IEnumerable<History> results = person.History
.OrderBy(h => h.OnDate)
.Take(50)
.ToArray();
它似乎为该人提取了所有历史记录,然后在内存中对其进行排序等。关于我缺少什么的任何建议?
提前致谢!
【问题讨论】:
-
您希望看到什么行为?是否未能将结果限制为 50 条记录?
-
我认为预期的行为是在数据库中订购它
-
我期待它通过服务器发送订单和限制,导致 SQL 服务器进行排序和限制。相反,它似乎将所有历史记录拉入内存,该联系人的所有 30,000 多个元素,然后在内存中执行顺序和限制。
-
为什么你确定它正在将它加载到内存中?看到生成的sql了吗?