2016-03-06 64 views
0

在AngularApp中,我通過OData查詢從WebAPI獲取數據。自定義orderBy與odata?

所有結果都有一個日期和一個int狀態碼。狀態碼可以是1,2,3或4.

我想訂購我的結果,因此所有帶狀態碼1的結果都會列在列表的頂部。其餘的結果(代碼2,3和4)根據附加的數據進行排序,而不是狀態代碼。

可能嗎?

這是我的代碼,因爲它現在看起來。它只是按日期排序,沒有別的。

return Products.query({ $orderby: 'Date' }); 
+0

你有過OData服務控制?換句話說,你可以向服務添加新的行爲嗎? – lencharest

+0

是的,我可以改變它。你在想什麼? – brother

+0

您無法將任意排序函數傳遞給'$ orderby'。無論如何,定義一個[OData函數]會更好 - (http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0 -errata02-os-part1-protocol-complete.html#_Toc406398351)來執行排序,而不是要求客戶端提供複雜的'$ orderby'子句。對一個綁定到'Products'實體集的函數的請求看起來像是'GET http:// host/Products/ServiceNamespace.CustomOrderBy'。 – lencharest

回答

1

根據您的描述,聽起來像是您希望StatusCode的1的所有產品得到同等對待。也就是說,它們不會被Date進一步分類。如果你可以放鬆這個要求一點,讓所有的產品至StatusCodeDate進行排序,有一個簡單的解決方案:

return Products.query({ $orderby: 'StatusCode,Date' }); 

中的OData V4的$orderby query option由「以逗號分隔的表達式列表其原始結果值用於對項目進行排序「。屬性名稱是用於生成排序值的最常用表達式。

如果你想扭轉排序上的特定屬性,請使用desc後綴該財產,像這樣:

return Products.query({ $orderby: 'StatusCode,Date desc' });