实体框架代码First IQueryable

Ter*_*rry 8 c# entity-framework-4.1

我正在使用Entity Framework Code First并遇到了一个小路障.我有一个类"Person"定义如下:

public class Person
{
    public Guid Id { get; set; }
    public virtual ICollection<History> History { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和一个"历史"类定义如下:

public class History
{
    public Guid Id { get; set; }
    public virtual Person Owner { get; set; }
    public DateTime OnDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我打电话时:

IEnumerable<History> results = person.History
                               .OrderBy(h => h.OnDate)
                               .Take(50)
                               .ToArray();
Run Code Online (Sandbox Code Playgroud)

它似乎为这个人拉出了所有的历史,然后在记忆中订购它.关于我缺少什么的任何建议?

提前致谢!

Era*_*nga 5

因为您正在查询IEnumerable(即:LINQ to Objects)IQueryable(即:LINQ to Entities),而不是EF.

相反,你应该使用

IEnumerable<History> results = context.History.Where(h => h.Person.Id = "sfssd").OrderBy(h => h.OnDate).Take(50)
Run Code Online (Sandbox Code Playgroud)