假设我有一个 List<Foo> foos
,其中元素的当前顺序很重要。如果我应用一个LINQ Enumerable方法,例如GroupBy
、Where
或Select
,能否依靠结果IEnumerable<Foo>
以与原始列表相同的相对顺序进行迭代?
假设我有一个 List<Foo> foos
,其中元素的当前顺序很重要。如果我应用一个LINQ Enumerable方法,例如GroupBy
、Where
或Select
,能否依靠结果IEnumerable<Foo>
以与原始列表相同的相对顺序进行迭代?
对于Enumerable
方法(适用于您提到的List<T>
的LINQ to Objects),您可以依赖Select
、Where
或GroupBy
返回的元素顺序。但是,对于本质上是无序的事物,例如ToDictionary
或Distinct
,则不是这种情况。
来自Enumerable.GroupBy文档:
IGrouping<TKey, TElement>
对象按照其来源source
中产生第一个键的元素顺序进行生成。分组中的元素按它们在source
中出现的顺序进行生成。
对于IQueryable
扩展方法(其他LINQ提供程序),不一定如此。