出问题代码如下:
List<Family_Base_Service_Order> orders = null;
try
{
orders = db.Family_Base_Service_Order.Where(c => c.EngineerId == userid
&& (c.CRMCheck == OrderState.JieDan || c.CRMCheck == OrderState.WaitForPay))
.OrderByDescending(c => c.ServiceTime)
.Skip((index-1)*pagesize)
.Take(pagesize)
.ToList()
}
catch (Exception)
{
orders = null;
}
代码逻辑是没有问题的,但是会造成分页出来的数据有周期重复性。
经调试去掉Skip 和Take 查询出来的结果是没有问题,看了一下排序的字段ServiceTime,发现都是空,问题可能就在这里,于是做一下修改,解决问题:
List<Family_Base_Service_Order> orders = null;
try
{
orders = db.Family_Base_Service_Order.Where(c => c.EngineerId == userid
&& (c.CRMCheck == OrderState.JieDan || c.CRMCheck == OrderState.WaitForPay))
.OrderByDescending(c => c.ServiceTime)
.ToList()
.Skip((index-1)*pagesize)
.Take(pagesize)
.ToList();
}
catch (Exception)
{
orders = null;
}
总结:当使用Linq to ef 进行数据库分页调取数据时,要排序的字段可能为空时,应将所有的查询出再进行分页操作。
(PS:最好还是用存储过程做分页吧)