Как сделать запрос с сущностью и подгонкой и списком страниц с одним миллионом строк

Я хочу запросить 1 миллион строк с помощью структуры сущностей, а затем разбить их на страницы. Я использую библиотеку pagedlist.mvc, и это не проблема для первой страницы, потому что я использовал .ToPagedList(pageNumber, pageSize) в своем коде, и нет необходимости загружать все мои данные.

 var allrows = db.works.Where(x => x.Status == 100).OrderByDescending(x => x.ID_Work).ToPagedList(pageNumber, pageSize);

но когда я добавляю действие фильтрации и разбиения по страницам, сначала я должен загрузить все строки, а затем отфильтровать их и после этого использовать .ToPagedList(pageNumber, pageSize).

var allrows = db.works.Where(x => x.Status == 100);
     if (!String.IsNullOrEmpty(Code_Work))
      {
       allrows= allrows.Where(x => x.Code_Work.Contains(Code_Work));
       ViewBag.CurrentCode_Work = Code_Work;
      }
var pagedrows = allrows.OrderByDescending(x => x.ID_Work).ToPagedList(pageNumber, pageSize);

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
214
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны прочитать разницу между IEnumerable и IQueryable

В вашем случае вам нужно сначала сделать запрос фильтра, используя IQueryable

IQueryable<works> worksDetails = db.works.Where(x => x.Status == 100)
              .OrderByDescending(x => x.ID_Work); // just creates the sql query to filter records

Наконец, нажмите на базу данных, чтобы получить записи с помощью PagedList.

var pagedrows = worksDetails.ToPagedList(pageNumber, pageSize); 
                                // hits the database and executes the sql query to filter records

Надеюсь это поможет.

хорошо, а затем, когда мы используем IQueryable, он не загружает данные? хорошо.

Ali SH elcid 20.05.2019 13:07

@AliSHelcid, да, правильно, это хорошо, потому что он сначала создает запрос, а затем запускает его в базе данных. Таким образом, из базы данных извлекаются только отфильтрованные записи. Но в случае IEnumerable все 1 миллион строк извлекаются из базы данных, а затем фильтруются данные, поэтому происходит потеря производительности.

Shaiju T 20.05.2019 13:48

Другие вопросы по теме