当执行下面的代码时,执行内存和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();
最佳答案
内存中的排序可能由于多种原因而有所不同。假设CourseNo是一个字符串而不是一个数字:
数据库中的区分大小写设置
进行字符串比较时的区域性设置
相等记录的排序-出于所有意图和目的,应将此类记录的结果顺序视为随机
正如您在代码示例中未指定上述所有内容一样,很难确切说明您的情况,但是如果您希望顺序完全相同,则应确保在处理上述所有问题时您的数据库和应用程序中的处理方式相同。
关于c# - Linq到NHibernate的订购无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26725803/