选择声明需要很长时间

时间:2011-09-29 20:53:36

标签: c# linq

您好我有一个方法:

public JsonResult GetActivities(int id)
{
    var activities = ActivityRepository.GetAll().Where(x => x.AreaId == id);

    var jsonData = new {
        rows = activities.Select(q => new {
            Id = q.Id.ToString(),
            q.Descriptor
        }).ToList()
    };

    return Json(jsonData, JsonRequestBehavior.AllowGet);
}

它工作正常,但我找到了一行:

var jsonData = new
{ 
    rows = activities.Select(q => new { Id = q.Id.ToString(), q.Descriptor }).ToList()
};

需要很长时间才能执行。

有人可以向我解释为什么会这样,是否有更有效的方式?

1 个答案:

答案 0 :(得分:1)

问题很可能与您的数据库有关......

正如@geofftnz已经提到的那样,你应该使用一个SQL分析器(例如AnjLab Sql Profiler),并找出幕后发生的事情。

之所以没有花费很长时间,是因为:

var activities = ActivityRepository.GetAll().Where(x => x.AreaId == id);

是因为返回类型IEnumerable<Activity>(懒惰),它还没有向数据库发送任何查询。

但是当你这样做时:

var jsonData = new 
{ 
    rows = activities.Select(q => new 
    { 
        Id = q.Id.ToString(), 
        q.Descriptor 
    }).ToList() 
};

它将构成一个查询,并在.ToList()(急切)点击数据库。