我想创建一个自定义IQueryable
提供程序。
我的IQueryable
实现是否保留了源元素的顺序?
例如,可以(new [] { 1, 2, 3 }).AsMyQueriable().Select(x => x).ToArray()
退货3, 2, 1
吗?
我想创建一个自定义IQueryable
提供程序。
我的IQueryable
实现是否保留了源元素的顺序?
例如,可以(new [] { 1, 2, 3 }).AsMyQueriable().Select(x => x).ToArray()
退货3, 2, 1
吗?
不。
如果使用您的提供程序的任何人需要以特定顺序访问元素,他们可以使用IQueryable.OrderBy
代替。
从技术上讲,您的可查询对象可以做任何感觉。作为IQueryable
一个接口,没有构造函数,因此在这方面没有必须遵循的约定——可查询对象只是可以通过某些特定方法查询的东西,它的开始状态不包含在接口契约。但是,您的扩展方法的文档应该清楚地表明输入序列的顺序是否由返回的IQueryable
对象保留。
当然,如果有人调用.OrderBy()
您的可查询实例,那么您应该相应地重新排序元素。但是,如果开发人员不调用,.OrderBy()
那么您可以自由地以您想要的任何顺序返回元素。