将带有$ expand选项的OData ApplyQuery方法结果转换为List <t>

时间:2016-09-12 12:02:18

标签: json entity-framework list odata iqueryable

我有一个OData get方法:

public class ProductController : ApiController
{
   [MyEnableQuery(PageSize = 48, AllowedQueryOptions = AllowedQueryOptions.OrderBy | AllowedQueryOptions.Top | AllowedQueryOptions.Skip | AllowedQueryOptions.InlineCount | AllowedQueryOptions.Filter | AllowedQueryOptions.Expand | AllowedQueryOptions.Select, AllowedFunctions = AllowedFunctions.SubstringOf | AllowedFunctions.ToLower)]
    public IQueryable<tbDefine_Products> GetProducts(ODataQueryOptions opts,[FromODataUri] int CategoryID)
    {
        ProductHandler _handler = new ProductHandler();
        IQueryable<tbDefine_Products> _list =_handler.GetProductActiveList(CategoryID);
        return _list;
    }
}

我已经超越了ApplyQuery方法来查询:

 public override IQueryable ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions)
    {
        IQueryable<Object> _list = base.ApplyQuery(queryable, queryOptions).Cast<Object>();
        return _list;
    }

我正在使用扩展选项的ODate Query形式:

http://localhost:5125/api2/product?CategoryID=-1&$skip=9&$top=1&$expand=tbDefine_Category

我希望在我的ApplyQuery方法中将base.ApplyQuery结果转换为某种形式的列表然后迭代它进行一些修改但我不知道如何...

 /*    IQueryable<MyExpandedType> _list = base.ApplyQuery(queryable, queryOptions).Cast<MyExpandedType>();
              List<MyExpandedType> _list2 = _list.ToList<MyExpandedType>();
               for (int i = 0; i < _list2.Count; i++)
               {
                      some modification here
               }  */

我收到以下错误

  

无法投射类型&#39; SelectAllAndExpand`1 [EDMX.tbDefine_Products]&#39;输入&#39; EDMX.tbDefine_Products&#39;。

1 个答案:

答案 0 :(得分:0)

我认为有一件事是您需要更正applyquery方法的签名。当它返回Iqueryable时,签名应该与我猜的相同。

public override IQueryable ApplyQuery。