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);