AnonyMouse
AnonyMouse

Reputation: 18650

Select statement taking a long time

Hi I have a method like:

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);
}

It works fine but I find the line:

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

takes a very long time to execute.

Could someone please explain to me why this is and is there a more efficient way?

Upvotes: 1

Views: 342

Answers (1)

ebb
ebb

Reputation: 9377

The problem is most likely related to your database somehow...

As @geofftnz already have mentioned, then you should use a SQL profiler (ex. AnjLab Sql Profiler), and figure out what's going on behind the scenes.

The reason for that it's not taking a long time for:

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

is that it's not sending any queries to the database yet, because of the return type IEnumerable<Activity> (lazy).

However when you do:

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

it will make up a query, and hit the database at .ToList() (eager).

Upvotes: 1

Related Questions