0

我有以下查询,根据提供的标准获取学校列表。注意:这个数据库非常非常大,有 10,000 多条记录。最终结果是 188 所学校的列表,这正是我们需要的。

return (from s in Context.Schools
        join d in Context.Districts on s.DistrictID equals d.DistrictID
        join r in Context.Rosters on s.SchoolID equals r.SchoolID
        join te in Context.TestEvents on r.TestEventID equals te.TestEventID
        join ta in Context.TestAdministrations on te.TestAdministrationID equals ta.TestAdministrationID
        join sr in Context.ScoreResults on r.RosterID equals sr.RosterID into exists
        from any in exists.DefaultIfEmpty()
        where d.DistrictID == DistrictID
        && ta.SchoolYearID == SchoolYearID.Value
        select s)
        .Distinct()
        .OrderBy(x => x.Name)
        .ToList();

问题是当我们打电话return Json(Schools, JsonRequestBehavior.AllowGet);将我们的学校送回给客户时,操作超时。在逐步执行代码时,由于某种原因,DbContext 试图提取此结果集的所有属性,包括我们不需要的属性。我已经从这个Schools对象的数据库中获得了我需要的一切。为什么它会返回并开始创建所有关联的对象。有没有办法阻止这种情况?

这是一个使用 EF 5 Code First 的 MVC 应用程序。

4

1 回答 1

0

不要选择整个实体,而是只选择您需要的投影:

var results = from s in Context.Schools
    ...
    select new MyClassContainingOnlyAFewProperties {
                 Prop1 = s.Prop1,
                 Prop2 = s.Prop2, 
                 //etc.
    }
return results;

另请参阅:实体框架中的查询投影是什么意思?

于 2013-06-25T19:41:42.477 回答