C# 如果多个条目具有相同的值,List.OrderBy()的结果是什么?
我在C# 如果多个条目具有相同的值,List.OrderBy()的结果是什么?,c#,.net,list,C#,.net,List,我在列表的OrderBy()方法中遇到了一个奇怪的行为 假设你有一个列表,每个人都有名,姓和性别。 如果此列表中的所有人都是性别“m”,我将在每次调用后得到不同的排序 list.OrderBy(p => p.Gender) 但我不希望我的列表在每次刷新时都跳转。有什么想法吗?如果性别相同,可以使用ThenBy()使用其他属性对其进行排序。像这样: list.OrderBy(p=>p.Gender).ThenBy(p=>p.FirstName); 在您的代码中,Genderm
列表的OrderBy()方法中遇到了一个奇怪的行为
假设你有一个列表,每个人都有名
,姓
和性别
。
如果此列表中的所有人都是性别
“m”
,我将在每次调用后得到不同的排序
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);
或
或
按所有字段排序,如:
list.OrderBy(x=>x.Gender).ThenBy(x=>x.FirstName).ThenBy(x=>x.LastName);
您不会得到不同的顺序,因为它使用的是稳定排序。您是否使用数据库驱动的提供程序,如Linq To Entities
?“此方法执行稳定排序;即,如果两个元素的键相等,则保留元素的顺序。相反,不稳定排序不会保留具有相同键的元素的顺序。”如果列表中的所有人都是男性,为什么按此顺序排列列表?是,它由数据库驱动,每15秒创建一次新对象。也许这就是原因。这只是一个例子。假设列表中有一位女性。它将始终显示在顶部。但是所有男性条目都会随机排序(在我的例子中),我认为这不能说得太频繁或太大声:LINQ排序是稳定的,所以它们不会弄乱预先排序的元素。。最后:-)谢谢。这就是解决办法。但我仍然想知道C#是如何对条目排序的,或者为什么顺序总是不同的。
list.OrderBy(p=>p.Gender).ThenBy(p=>p.FirstName);
list.OrderBy(x=>x.Gender).ThenBy(x=>x.FirstName).ThenBy(x=>x.LastName);