如何使用实体和过滤以及具有一百万行的分页列表进行查询

How to query with entity and fitlering and pagedlist with one milion rows

我想用 entity framework 查询 100 万行,然后对它们进行分页。我使用 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);

我该如何应对这个挑战。我认为这可能是问题并降低性能。我不想加载我所有的行。

您应该阅读 IEnumerable and 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

希望对您有所帮助。