我使用Lists
的OrderBy()
方法时出现了奇怪的问题。
假设你有一个列表,每个人都有Firstname
、Lastname
和Gender
。如果这个列表中的所有人都是"m"
性别的话,在每次调用OrderBy()
方法后,排序结果将会不同。
list.OrderBy(p => p.Gender)
但我不希望我的列表在每次刷新时都跳来跳去。有什么想法吗?
ThenBy()
方法按照其他属性对具有相同性别的对象进行排序。示例如下:list.OrderBy(p=>p.Gender).ThenBy(p=>p.FirstName);
Gender
m
是一个字符串类型,并且有许多结果使用了 m
,但它不是可排序实体。因此,当你尝试使用该属性进行排序时,它会随机地使用 m
进行排序。尝试使用其他具有可排序实体的内容进行排序,比如 FirstName
。list.OrderBy(p=>p.Firstname);
or
list.OrderBy(p=>p.Lastname);
或者
list.OrderBy(p=>p.Gender).ThenBy(p=>p.FirstName);
按所有字段排序,例如:
list.OrderBy(x=>x.Gender).ThenBy(x=>x.FirstName).ThenBy(x=>x.LastName);
OrderBy
使用的是稳定排序,因此您不会得到不同的顺序。您是否使用基于数据库的提供程序,例如Linq-To-Entities
?“此方法执行稳定排序;也就是说,如果两个元素的键相等,则保留元素的顺序。相反,不稳定的排序不保留具有相同键的元素的顺序。” - Tim Schmelter