2016-08-26 10 views
0

У меня есть метод контроллер прибудет OData как ниже:Изменение веба-апите 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; 
    } 
} 

Теперь я хочу изменить свой результат запроса перед отправкой его clinet ... я хочу что-то вроде _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, вы должны переопределить метод:

public virtual IQueryable ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions) 

получить результат запроса первый, а затем фильтровать результат:

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

Very Thx. ..Оно работает! –