.NET EF LINQ 分页(Skip/Take)造成数据重复原因

来源:互联网 发布:手机交友调查数据 编辑:程序博客网 时间:2024/05/16 10:37

出问题代码如下:

    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:最好还是用存储过程做分页吧)

1 0
原创粉丝点击