2013-06-26 4 views
3

OData를 웹 API와 함께 사용하고 유형별로 쿼리를 작성하려고합니다. 내가 원하는 것은 다음과 같은 쿼리를 제공하는 것입니다 (굵은 텍스트는 구문 상 올바르지 않지만 형식을 주장한 후에 무엇을 하려는지 설명합니다) :odata 함수를 사용하여 웹 API를 사용하는 isof

../Supplier?$filter = isof (제품, namespace.ToyProduct) 5

그러나 나는 [Queryable에서] 속성이 일을 내가 관련이있는 방법 지원되지 않는 오류를 얻을 수 ODataController에서 상속 할 때 & Product.ratedAge의 EQ isof. 메서드를 지원할 수있는 방법이 있습니까? 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()); 

    } 
} 
+0

"isof"함수를 시뮬레이트하기 위해 쿼리에 대한 "OfType"호출을 발생시키는 해결책이 있습니다. 코드는 https://github.com/schungx/WebApi-odata를 참조하십시오. –

답변

1

우리는 웹 API에 isof 캐스트 기능을 지원하지 않습니다. 대신 별도의 세그먼트를 사용하여 새로운 캐스트 구문을 지원합니다. 귀하의 질문은 내가 질문에 대답 일치를 생각하지 마십시오

../Supplier?$filter=Product/namespace.ToyProduct/ratedAge eq 5

+0

이 새로운 구문과 사용 방법에 대한 설명서 링크를 제공 할 수 있습니까? 나는 OP와 같은 문제를 겪고 있었지만, 나는 당신의 제안을 할 수 없었다. 나는 isof 함수의 다른 "오버로드"를 사용하고 있었는데, 이것은 단일 인용 부호로 된 완전한 타입의 이름만을 취한다. 또한 처음부터 지원하지 않는 이유는 무엇입니까? – julealgon

1

, 새로운 구문과 같을 것이다. 문제 원래 쿼리는 다음과 같습니다

../Supplier?$filter=isof(Product, namespace.ToyProduct)&Product.ratedAge eq 5 

내가 실제로 할 의미 같아요

../Supplier?$filter=isof(Product, namespace.ToyProduct)%20and%20Product.ratedAge eq 5 

을 어쨌든, 특정 파생 된 유형 또는 하위 유형의 엔티티를 검색하는 필터입니다. 대답은 그렇게하지 않습니다.

관련 문제