C# 在OrderBy中维护子序列顺序

C# 在OrderBy中维护子序列顺序,c#,sorting,ienumerable,C#,Sorting,Ienumerable,假设我有一个类,它有一个integerDay属性和一个IEnumerable对象,其中days是2、3、4、1、3、3和5(按顺序) 是否有一种方法可以保证(例如)o.Day==3的子序列的顺序是从其元素在原始列表中的相对位置保持的,而不需要显式地、自定义地实现IEnumerable?OrderBy被记录为是,如果这是您的意思;所以:你不需要做任何事情 此方法执行稳定排序;也就是说,如果两个元素的键相等,则保留元素的顺序。相反,不稳定排序不会保留具有相同键的元素的顺序 有没有办法保证子序列的顺

假设我有一个类,它有一个integer
Day
属性和一个
IEnumerable
对象,其中days是2、3、4、1、3、3和5(按顺序)


是否有一种方法可以保证(例如)
o.Day==3
的子序列的顺序是从其元素在原始列表中的相对位置保持的,而不需要显式地、自定义地实现
IEnumerable

OrderBy
被记录为是,如果这是您的意思;所以:你不需要做任何事情

此方法执行稳定排序;也就是说,如果两个元素的键相等,则保留元素的顺序。相反,不稳定排序不会保留具有相同键的元素的顺序

有没有办法保证子序列的顺序

假设你有这样的课:

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
,然后答案是“不,你不能保证”

如果您的序列是一个
列表
,那么将保留顺序(实际上,它将使用LINQ to对象而不仅仅是列表来保留)


如果序列是
IQueryable
,则顺序可能取决于LINQ提供程序实现、底层数据源和当前表达式树,它们已经包含在
IQueryable
中。因此,在这种情况下,您应该使用
OrderBy
/
OrderByDescending

强制排序什么子序列?我只看到一个
IEnumerable
对象。@TimSchmelter我认为OP是指这两个3个元素一个接一个。@golergka完全正确-子序列是初始序列的有序子集。我没有投反对票,但我不同意你的答案。如果
sequence
IEnumerable
sequence.Where(item=>item.Day==3)
将保留原始顺序。@user2266486:是的,它将保留原始顺序
如果您的序列是一个列表,则排序将被保留
-您读过吗?问题明确指出
IEnumerable
-因此这里只有
可枚举
(而不是
可查询
)方法是候选方法;还有-问题是关于
OrderBy
,而不是
Where
@marcgravel:除了标题之外,你在任何地方都看到
OrderBy
了吗?@Dennis是的,我看到了。我不同意你在“答案是“不,你不能保证”之前所说的话。此外,序列不需要是
List
IEnumerable
就足够了。完美。这正是我想要的。谢谢