0

我想创建一个自定义IQueryable提供程序。

我的IQueryable实现是否保留了源元素的顺序?

例如,可以(new [] { 1, 2, 3 }).AsMyQueriable().Select(x => x).ToArray()退货3, 2, 1吗?

4

2 回答 2

1

不。

如果使用您的提供程序的任何人需要以特定顺序访问元素,他们可以使用IQueryable.OrderBy代替。

于 2013-02-18T17:37:18.013 回答
1

从技术上讲,您的可查询对象可以做任何感觉。作为IQueryable一个接口,没有构造函数,因此在这方面没有必须遵循的约定——可查询对象只是可以通过某些特定方法查询的东西,它的开始状态不包含在接口契约。但是,您的扩展方法的文档应该清楚地表明输入序列的顺序是否由返回的IQueryable对象保留。

当然,如果有人调用.OrderBy()您的可查询实例,那么您应该相应地重新排序元素。但是,如果开发人员不调用,.OrderBy()那么您可以自由地以您想要的任何顺序返回元素。

于 2013-02-18T17:36:20.717 回答