Linq到NHibernate的排序没有按预期工作

时间:2014-11-04 00:30:25

标签: c# linq nhibernate linq-to-nhibernate

执行下面的代码时,我在内存和SQL排序中执行时会得到不同的结果。谁能解释为什么会这样。我希望查询以完全相同的顺序返回记录。

       IQueryable<WaitListListItem> query = GetQuery();

        query = query.OrderBy(f => f.CourseNo);

        int pageSize = 14;
        int startRecord = 6;

        IList<WaitListListItem> list1 = query.Skip(startRecord).Take(pageSize).ToList(); // database query paging
        IList<WaitListListItem> list2 = query.ToList().Skip(startRecord).Take(pageSize).ToList(); // In Memory paging

        Print(pageSize, list1, list2);

        int pageSize2 = 14;
        int startRecord2 = 0;

        IList<WaitListListItem> list3 = query.Skip(startRecord2).Take(pageSize2).ToList(); // database query paging
        IList<WaitListListItem> list4 = query.ToList(); // No Paging

        Print(pageSize2, list3, list4);

        Console.ReadLine();

1 个答案:

答案 0 :(得分:1)

在内存中,由于多种原因,排序可能会有所不同。假设CourseNo是一个字符串而不是一个数字:

  1. 数据库中的区分大小写设置
  2. 进行字符串比较时的文化设置
  3. 对相同记录进行排序 - 对于所有意图和目的,此类记录的结果顺序应视为随机的
  4. 由于您在代码示例中未指定上述任何内容,因此很难确切地说明您的情况发生了什么,但如果您希望排序完全相同,那么您应该确保上述每个问题在数据库和应用程序中以相同的方式处理。