Asp.net web api 如何将ODataQueryOptions与$expand一起使用

Asp.net web api 如何将ODataQueryOptions与$expand一起使用,asp.net-web-api,odata,Asp.net Web Api,Odata,我一直在使用下面的代码将“Odata”样式的参数注入到查询中。在我尝试使用$expand之前,这一切都很正常,但我得到了一个转换错误 无法将类型为“System.Data.Entity.Infrastructure.DbQuery”的对象强制转换为类型为“System.Collections.Generic.IEnumerable`1[System.Web.Http.OData.Query.Expressions.SelectExpandBinder+SelectAllAndExpand1[ST

我一直在使用下面的代码将“Odata”样式的参数注入到查询中。在我尝试使用$expand之前,这一切都很正常,但我得到了一个转换错误

无法将类型为“System.Data.Entity.Infrastructure.DbQuery”的对象强制转换为类型为“System.Collections.Generic.IEnumerable`1[System.Web.Http.OData.Query.Expressions.SelectExpandBinder+SelectAllAndExpand1[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();
    }
publicstaticlist应用程序(HttpRequestMessage请求,IQueryable查询)
{
var context=新的ODataQueryContext(theedModel(),typeof(T));
var newOptions=新的ODataQueryOptions(上下文、请求);
return((IEnumerable)newOptions.ApplyTo(query)).ToList();
}
我知道当使用$expand时,会返回不同的包装类,但如何将其转换为列表?

请遵循以下示例: 公共类OrderController:ApicController

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>;
}
publicIQueryable获取(ODataQueryOptions查询选项)
{
//注册自定义FilterByValidator以禁止筛选器查询中的自定义逻辑
if(queryOptions.Filter!=null)
{
queryOptions.Filter.Validator=new RestrictiveFilterByQueryValidator();
}
//验证查询,我们只允许order by Id属性和
//我们只允许最大Top查询值为9
ODataValidationSettings=新ODataValidationSettings(){MaxTop=9};
settings.AllowedOrderByProperties.Add(“Id”);
查询选项。验证(设置);
//应用查询
将queryOptions.ApplyTo(OrderList.AsQueryable())作为IQueryable返回;
}

本文帮助我解决了使用$expand时的问题