2014-11-04 3 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

+0

Это, похоже, проблема с поисковым вызовом и не сортировкой. Сортировка выполняется в БД в обоих случаях. Это пейджинг, который выполняется в БД и в памяти. Можете ли вы опубликовать сгенерированный SQL для обоих? – Euphoric

ответ

0

В сортировке памяти, вероятно, будет отличаться по ряду причин. Если предположить, что CourseNo является строкой, а не номер:

  1. настройки чувствительности к регистру в базе данных
  2. настройки культуры при выполнении сравнения строк
  3. Сортировки равных записей - результирующий порядка таких записей следует считать случайной

Как вы уже указали ни один из приведенных выше в своем примере кода, трудно точно сказать, что происходит в вашем случае, но если вы ожидаете, что порядок будет точно таким же, то вы следует обеспечить, чтобы eac h вышеупомянутых проблем обрабатываются таким же образом в вашей базе данных и в вашем приложении.

Смежные вопросы