我一直在使用以下代码将“Odata”样式参数注入查询。 这工作正常,直到我尝试使用$ expand,我得到一个转换错误

无法转换类型为'System.Data.Entity.Infrastructure.DbQuery 1[System.Web.Http.OData.Query.Expressions.SelectExpandBinder+SelectAllAndExpand 1 [STOS.Repository.Entities.Item]]'的对象以键入'System。 Collections.Generic.IEnumerable`1 [STOS.Repository.Entities.Item]”。

    public static List<T> ApplyTo<T>(HttpRequestMessage request, IQueryable<T> query)
    {
        var context = new ODataQueryContext(TheEdmModel(), typeof(T));
        var newOptions = new ODataQueryOptions<T>(context, request);
        return ((IEnumerable<T>)newOptions.ApplyTo(query)).ToList();
    }

我知道当使用$ expand时,会返回一个不同的包装类,但是如何将其转换为List?

===============>>#1 票数:1

请按照以下示例https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v3/ODataQueryableSample/:public class OrderController:ApiController

public IQueryable<Order> Get(ODataQueryOptions queryOptions)
{
    // Register a custom FilterByValidator to disallow custom logic in the filter query
    if (queryOptions.Filter != null)
    {
        queryOptions.Filter.Validator = new RestrictiveFilterByQueryValidator();
    }

    // Validate the query, we only allow order by Id property and 
    // we only allow maximum Top query value to be 9
    ODataValidationSettings settings = new ODataValidationSettings(){ MaxTop = 9 };
    settings.AllowedOrderByProperties.Add("Id");
    queryOptions.Validate(settings);

    // Apply the query
    return queryOptions.ApplyTo(OrderList.AsQueryable()) as IQueryable<Order>;
}

  ask by Salguod translate from so

未解决问题?本站智能推荐:

1回复

如何在ASP.NET WebApi / OData项目中使用TypeLess(UnTyped)对象的情况下使用ODataQueryOptions

我一直在指Asp.net WebApi 2.2对OData的支持。 WebApi处理许多与OData V4协议相关的事情非常有趣。 我需要在没有CLR对象的地方实现Odata服务。 我在运行时了解类的属性。 就像我有存储Sql查询的xml文件一样。 我阅读了这些xml文件并在其中执
1回复

$ select和$ expand break ODataQueryOptions - 如何修复?

我们将Microsoft ASP.NET MVC OData WebAPI用于我们的Web服务。 由于围绕层次结构ID的某些数据架构问题(这些问题超出了此对话的范围),我们的一些GET操作必须使用ODataQueryOptions并手动操作表达式以添加其他限制。 我们这样做(删除错误处理代码
2回复

使用ODataQueryOptions扩展导航属性

我正在构建一个OData v.4 Web服务,该服务必须公开从另一个第三方网络源检索到的数据,因此该数据与LINQ世界中的任何内容都不相似,即:没有IQueryable,没有Context,什么都没有。 解决方法似乎是手动处理ODataQueryOptions中的参数并返回简单的项目序列。
1回复

使用WebApi和ODataQueryOptions实现$ select

我正在尝试使用ODataQueryOptions通过自定义DAL实现一些OData功能。 我的DAL使用设计时生成的类型化数据表。 通过拦截ODataQueryOptions的SelectExpand属性,我可以使我们的DAL仅加载所需的列。 然后我该如何只返回所需的数据。
2回复

使用ODataQueryOptions编写单元测试

我是新手为WebAPI编写测试用例。 我曾经看到过类似的问题,但没有回答,但我想知道如果他们将ODataQueryOptions作为参数的一部分,我将如何测试我的API。 见下文: 我需要moq吗? 如果是这样,这看起来怎么样? 任何帮助,将不胜感激。
3回复

如何在.ashx上手动创建ODataQueryOptions

我想重建我的上一个项目。 在过去,我没有使用任何Web API。 我可以使用ODataQueryOptions在我自己的handler.ashx中为我的查询执行$ filter,$ orderby,$ top,$ skip吗? 就像是。
2回复

MapODataRoute和ODataQueryOptions

我正在构建一个处理无类型实体对象的WebAPI OData解决方案,如这篇出色的文章中所述 。 像那篇文章一样,我预先定义了Edm​​Model,并使用MapODataRoute方法并传入模型以使用: 但是,这似乎不适用于我的方法中的ODataQueryOptions参数: 它
1回复

使用ODataQueryOptions对包含自定义类型的Linq进行过滤

在执行服务器端操作的MVC中实现Kendo Grid时,我发现自己处在一个棘手的情况下,即,我必须使用linq过滤,排序和分页数据。 我得到的所有信息都在ODataQueryOptions类型中。 (不确定是否需要提及,但是为了完整性,我们通过UnitOfWork模式执行查询操作)
1回复

Web API 2.2 - 当$ select或$ expand存在时,OData v4 ODataQueryOptions.applyTo()返回null?

我已经设置了一个Web API 2.2 ODataController,这样我就可以手动处理我的OData选项(即没有[EnableQuery]和/或使用ODataQueryOptions参数)。 但是我遇到了一个看起来像个bug的东西。 给出以下代码: 哪个工作100%,但添加$
1回复

ODataQueryOptions未应用

我可能会遗漏一些简单的东西,但基于这篇博文: http : //www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options这应该工作。 我有以下控制器方法: 当我