如何查询具有一百万行的实体和装配体以及分页列表

时间:2019-05-20 07:52:39

标签: asp.net-mvc entity-framework ienumerable pagedlist

我想用实体框架查询一百万行,然后分页。我使用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 :(得分:0)

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

希望这会有所帮助。