Я получаю выгружаемый источник данных из довольно сложного запроса linq. Моя проблема заключается в том, что выполнение занимает вдвое больше времени, так как мне нужно получить общее количество строк перед применением подкачки для вычисления nr. страниц для отображения. (запрос будет выполнен дважды)
Могу ли я как-нибудь сделать это более оптимальным способом? Как, например, использовать SQL @@ rowcount?
Примерно так выглядит запрос прямо сейчас. (используя Dynamic linq)
public IList<User> GetPagedUsers(string filter, string sort, int skip,
int take, out int totalRows)
{
using(var dbContext = new DataContext())
{
IQueryable<User> q = GetVeryComplexQuery(dbContext);
//Apply filter if exists
if (!string.IsNullOrEmpty(filter))
q = q.Where(filter);
//Set total rows to the out parameter
totalRows = q.Count(); //Takes 4 sec to run
//Apply sort if exists
if (!string.IsNullOrEmpty(sort))
q = q.OrderBy(sort);
//Apply paging and return
return q.Skip(skip).Take(take).ToList(); //Takes 4 sec to run
}
}
Почему это не работает, например?
TblCompanies.Dump(); //150 rows
ExecuteQuery<int>("select @@ROWCOUNT").Dump(); //returns 0