LINQ扩展方法在哪里可以保证保存顺序?

Lin*_*usK 10 c# linq

如果我在发布/订阅体系结构中有一个消息列表,我认为在底层列表上使用IEnumerable.Where来检索特定消息并信任消息的顺序是合理的吗?

Ste*_*ven 23

Enumerable.Where扩展方法,但Queryable.Where扩展方法的习惯.

Enumerable.Where 必须保留顺序,因为它流式传输结果并且没有缓存(缓存结果中没有逻辑).

Queryable.Where另一方面,将给定的查询转换为基础数据源将理解的内容,并且无法保证所需的顺序.使用关系数据库时,可以轻松地观察到这种效果.添加一个where子句可以让数据库选择另一个索引,这可以改变结果的顺序.

  • 虽然"Enumerable.Where"目前保留了订单,但我没有在界面文档中看到任何保证它的内容.当然,如果你使用"ParallelEnumerable",所有的赌注都会被取消. (4认同)

Bro*_*ass 7

对于Linq to Objects/IEnumerable这是真的 - 订单将被维护 - 对于IQueryable依赖于提供商的提供商,许多提供商不维护订单.

看起来这个事实(维护顺序)没有记录在MSDN上,所以我认为它是一个实现细节 - 尽管不太可能 - 将来可能会改变.