2014-11-04 70 views
1

当执行下面的代码时,当我在内存和SQL排序中执行时,会得到不同的结果。任何人都可以解释这是为什么。我期望查询以完全相同的顺序返回记录。Linq到NHibernate排序不能按预期工作

 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(); 
+0

进一步说明。该顺序是正确的,该列表是按字母顺序排列的课程编号。但是包含相同课程编号的记录 – user3845056 2014-11-04 00:32:54

+0

这似乎是分页和不分页的问题。在两种情况下,排序都在DB中完成。它是在DB和内存中完成的分页。你能为两者发布生成的SQL吗? – Euphoric 2014-11-04 07:27:52

回答

0

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

  1. 数据库区分大小写设置
  2. 文化设置做字符串比较时相等的记录
  3. 订购 - 所产生的这样的记录顺序应被视为随机对于所有的意图和目的

因为你没有在你的代码示例中指定上述内容,所以很难说你的情况到底发生了什么,但是如果你期望的排序完全一样,那么你应该确保eac上述问题的h在您的数据库和您的应用程序中以相同的方式处理。