Как сделать запрос с сущностью, фитлингом и постраничным списком в несколько миллионов строк - PullRequest
0 голосов
/ 20 мая 2019

Я хочу запросить 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);

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

1 Ответ

0 голосов
/ 20 мая 2019

Вы должны прочитать разницу между 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

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

...