修改web api 2 odata 获取查询结果

Modifying web api 2 odata get query result

我有一个 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 类 但我不知道如何实现我的想法

似乎您已经实现了有关 EnableQuery 属性的实现:MyEnableQuery,您应该覆盖该方法:

public virtual IQueryable ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions)

先获取查询结果再过滤结果:

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