Получение COUNT и SKIP TAKE за одну операцию с помощью Linq to EntitiesC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Получение COUNT и SKIP TAKE за одну операцию с помощью Linq to Entities

Сообщение Anonymous »

У меня есть вызов данных на уровне доступа к данным на базе Linq to Entities, который предназначен для выполнения пейджинговых вызовов.

При этом мне нужно выбрать подмножество данных, скажем, 50 строк, но также получить количество всех совпадений, чтобы узнать, сколько всего совпадений существует для постраничного просмотра.

В настоящее время я выполняю следующее:

Код: Выделить всё

var queryResult = DatabaseContext.Table
.Where(x => !x.IsDeleted)
.Where(p => (
p.PropertyOne.ToLower().Contains(query) ||
p.PropertyTwo.ToLower().Contains(query)
));

int count = queryResult.Count();

var returnData = queryResult
.OrderBy(i => i.ID)
.Skip(start).Take((length))
.Select(y => new ObjectDTO
{
PropertyOne = y.PropertyOne,
PropertyTwo = y.PropertyTwo
}
.AsEnumerable();
Это приводит к двум дорогостоящим операциям с базой данных. Операция COUNT по какой-то причине занимает больше времени, чем операция SELECT.

Есть ли способ получить количество и подмножество в одном и том же операцию?

Логическая последовательность действий подсказывает мне, что мы делаем следующее:
  • Просмотрите таблицу.
  • Найдите в таблице элементы, соответствующие условию.
  • Получите количество всех совпадений.
  • Вернуть пронумерованное подмножество совпадений
Кажется, это возможно за одну операцию, но я не могу понять, как это сделать.

Попытка первая, медленнее

Попробовал предложение Д. Стэнли о преобразовании полного набора результатов в список

code> и выполняет подсчет и память при подкачке, но это примерно в 2 раза медленнее (в среднем 6,9 с против 3,9 с в среднем)

Стоит отметить, что набор данных составляет примерно 25 000 записей. , с более чем дюжиной связанных таблиц, поиск по которым осуществляется посредством JOIN.

Подробнее здесь: https://stackoverflow.com/questions/292 ... o-entities
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ЧРЕЗВЫЧАЙНО низкая производительность запросов LINQ при использовании Skip/Take для пейджинга
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Linq Paging с использованием Skip and Take возвращает неверный результат
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Производительность Skip and Take в Linq to Objects
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Я пытаюсь разбить на страницы, используя подход Skip Take в коде Frist, но возникла ошибка
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Entity Framework Core: Skip Take Проблема производительности
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»