В настоящее время, когда мне нужно выполнить запрос, который будет использоваться с разбиением по страницам, я делаю это примерно так:
//Setup query (Typically much more complex)
var q = ctx.People.Where(p=>p.Name.StartsWith("A"));
//Get total result count prior to sorting
int total = q.Count();
//Apply sort to query
q = q.OrderBy(p => p.Name);
q.Select(p => new PersonResult
{
Name = p.Name
}.Skip(skipRows).Take(pageSize).ToArray();
Это работает, но я подумал, можно ли это улучшить, чтобы сделать его более эффективным. пока все еще используете linq? Я не мог придумать способ объединить счетчик с извлечением данных за одну поездку в БД без использования хранимой процедуры.