假设我有一个具有整数Day
属性的类和一个IEnumerable<T>
对象,其中天数为 2、3、4、1、3、3 和 5(按此顺序)。
有没有办法保证子序列的顺序(例如)o.Day == 3
从其元素在原始列表中的相对位置保持不变,而不需要显式的自定义实现IEnumerable
?
假设我有一个具有整数Day
属性的类和一个IEnumerable<T>
对象,其中天数为 2、3、4、1、3、3 和 5(按此顺序)。
有没有办法保证子序列的顺序(例如)o.Day == 3
从其元素在原始列表中的相对位置保持不变,而不需要显式的自定义实现IEnumerable
?
OrderBy
记录为stable,如果这是您的意思;所以:你不需要做任何事情。
该方法执行稳定排序;也就是说,如果两个元素的键相等,则保留元素的顺序。相反,不稳定的排序不会保留具有相同键的元素的顺序。
有没有办法保证子序列的顺序
假设您有这样的课程:
class A
{
public string Name { get; set; }
public int Day { get; set; }
// other properties
}
和顺序:
{ "A", 2 },
{ "B", 3 },
{ "C", 4 },
{ "D", 1 },
{ "E", 3 },
{ "F", 3 },
{ "G", 5 },
如果你的意思是,这是否会:
sequence.Where(item => item.Day == 3)
生成序列,其中项目将像这样排序:B, E, F
,那么答案是“不,你不能保证”。
如果您的序列是 a List<A>
,则将保留排序(实际上,它将与 LINQ to Objects 一起保留,而不仅仅是列表)。
如果您的序列是IQueryable<A>
,那么排序可能取决于 LINQ 提供程序实现、底层数据源和当前表达式树,已经包含在IQueryable<A>
. 因此,在这种情况下,您应该强制使用OrderBy
/进行排序OrderByDescending
。