我想創建一個自定義的IQueryable
供應商。有IQueryable提供程序來保存順序嗎?
有我IQueryable
實現保持源元素的順序?
對於爲例,可以(new [] { 1, 2, 3 }).AsMyQueriable().Select(x => x).ToArray()
返回3, 2, 1
?
我想創建一個自定義的IQueryable
供應商。有IQueryable提供程序來保存順序嗎?
有我IQueryable
實現保持源元素的順序?
對於爲例,可以(new [] { 1, 2, 3 }).AsMyQueriable().Select(x => x).ToArray()
返回3, 2, 1
?
從技術上講,您可查詢可以爲所欲爲感覺。作爲IQueryable
是一個接口,沒有構造等有沒有合同,你必須在這方面遵循 - 可查詢的只是一個可以通過一些具體的方法進行查詢的東西,它的開始狀態是不是因爲覆蓋的一部分界面合同。但是,您的擴展方法的文檔應清楚地指明返回的IQueryable
對象是否保留了輸入序列的順序。
當然,如果有人對你可查詢的一個實例調用.OrderBy()
,可以預計的是,你相應地重新排序的元素。但是,如果開發人員不打電話給.OrderBy()
,那麼您可以按照您想要的順序自由返回元素。
號
如果使用您的供應商任何人需要訪問的元素在一個特定的順序,他們可以只使用IQueryable.OrderBy
來代替。
在這種情況下,這將是「預期行爲」的_Reverse_方法嗎? – 2013-02-18 17:42:53
@CédricBignon不是所有的提供者都有一個所有方法的實現。它可能只是拋出一個異常,或者忽略它並按照它感覺的順序返回這些項目,除非它在'OrderBy'之後被調用。 – Servy 2013-02-18 17:44:55
對不起,但是構造函數與合同有什麼關係? – 2013-02-18 18:26:11