我正在使用OData和web api,並嘗試根據類型細節進行查詢。我想要的是提供一個類似於這樣的查詢(粗體文本在句法上不正確,但描述了在聲明該類型之後我要做的事情):使用odata函數isof with web api
../Supplier?$ filter = ISOF(產品,namespace.ToyProduct) & Product.ratedAge EQ 5
但是當我嘗試用[可查詢]屬性這樣做的,從ODataController繼承我得到方法不支持錯誤與問候該等。有什麼方法可以支持該方法嗎?我曾嘗試將AllowedFunctions.All添加到Queryable屬性,但這不起作用。
我能夠使用ODataQueryOptions來檢查過濾器中是否包含isof,並使用我自己的方法進行檢查,但是它非常混亂,並且在允許額外過濾後可能會變得更糟,如果存在更好的解決方案!
未編譯的代碼,因爲它目前爲:
public class SupplierController : ODataController {
[Queryable(AllowedFunctions = AllowedFunctions.All)]
public PageResult<Supplier> Get(ODataQueryOptions<Supplier> queryOptions) {
// doesn't work, method not supported
//var queryableSuppliers = queryOptions.ApplyTo(_repository.All());
// works but messy method.
var queryableSuppliers = MyIsOfMethod(queryOptions.Filter)
return new PageResult<ObjectType>(
results as IEnumerable<ObjectType>,
Request.GetNextPageLink(),
Request.GetInlineCount());
}
}
我有一個解決方案,以模擬「isof」函數來調用查詢的「OfType」調用。代碼見https://github.com/schungx/WebApi-OData。 –