2014-11-04 48 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在您的數據庫和您的應用程序中以相同的方式處理。