2016-08-26 6 views
0

나는 중 하나로, OData 컨트롤러 get 메소드 울부 짖는 소리처럼이 : 수정 웹 API를 2 쿼리 결과를 얻을 하나로, OData

public class ProductController : ApiController 
{ 
    [MyEnableQuery(PageSize = 48, AllowedQueryOptions = AllowedQueryOptions.OrderBy | AllowedQueryOptions.Top | AllowedQueryOptions.Skip | AllowedQueryOptions.InlineCount | AllowedQueryOptions.Filter, AllowedFunctions = AllowedFunctions.SubstringOf | AllowedFunctions.ToLower)] 

    public IQueryable<tbDefine_Products> GetProducts([FromODataUri] int CategoryID) 
    { 
     ProductHandler _handler = new ProductHandler(); 
     IQueryable<tbDefine_Products> _list =_handler.GetProductActiveList(CategoryID); 
     return _list; 
    } 
} 

지금 내가 그것을의 Network mode을 보내기 전에 내 쿼리 결과를 수정하고 싶은

... 난 _list 같은 원하는 내 아이디어를 구현하는 방법을 알고 .Tolist() 한 다음

 List<tbDefine_Products> _list2 = _list.ToList<tbDefine_Products>(); 
     for (int i = 0; i < _list2.Count; i++) 
     { 
     /*some code here to modify result */ 
     } 

내가 ActionFilterAttribute 및 ActionFilterAttribute.OnActionExecuted 및 HttpActionExecutedContext 클래스에 대해 조금 읽은 결과 배열을 통해 반복하지만 난 그나마

답변

0

이미 EnableQuery 속성에 대한 구현을 것 같다 : MyEnableQuery, 당신은 방법 오버라이드 (override) :

public virtual IQueryable ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions) 

먼저 쿼리 결과를 얻을 후 결과 필터링 :

var result = base.ApplyQuery(queryable, queryOptions); 
// filter the result. 
return result; 
+0

아주 들으을. .. 작동합니다! –