gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:53:15 26 4
gpt4 key购买 nike

我一直在使用以下代码将“Odata”样式参数注入(inject)查询中。这工作正常,直到我尝试使用 $expand,并且出现转换错误

无法转换类型为“System.Data.Entity.Infrastruct.DbQuery”的对象1[System.Web.Http.OData.Query.Expressions.SelectExpandBinder+SelectAllAndExpand1[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 时,会返回一个不同的包装类,但是如何将其转换为列表?

最佳答案

请按照此示例 https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v3/ODataQueryableSample/ :公共(public)类 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>;
}

关于asp.net-web-api - 如何将 ODataQueryOptions 与 $expand 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23177040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com