gpt4 book ai didi

asp.net-web-api - 查询后修改odata结果

转载 作者:行者123 更新时间:2023-12-04 07:21:02 25 4
gpt4 key购买 nike

我有一个使用 Entity Framework 和 Odata 的 ASP.NET Web API 应用程序。

我想在使用 GET 时修改查询结果...目前,在 Controller 中,您实际上只需将 EntityFramework 数据实体传递回 Odata 处理程序...

[EnableQuery]
public IQueryable<myEntity> GetLineItem()
{
return db.myEntities;
}

通过简单地返回一个子集,将任何查询 Odata 传递给它很简单
return db.myEntity.Where(myEntity => myEntity.Name == "Bob")

Odata 会将 $filter 查询字符串参数中的任何内容添加到此处传递的表达式中,您将获得这些结果的子集。

但是,一旦查询执行并将 SQL 结果解析为实体对象,我想对结果进行迭代。

我已经尝试创建一个实现 IQueryable 接口(interface)并连接到 GetEnumerator 方法的包装器,对于 IProvider 和连接到执行方法也是如此。 Odata 似乎没有使用其中任何一种。

有没有办法做到这一点?

最佳答案

使用 OData 时,您不必从 Controller 返回 IQuerable。检查 https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options 上的“直接调用查询选项”部分
对于您的情况,它看起来像:

public HttpResponseMessage Get(ODataQueryOptions<myEntity> opts)
{
var settings = new ODataValidationSettings();

opts.Validate(settings);

var intermediateResult = opts.ApplyTo(db.myEntities).ToArray();

var result = //change intermediateResult as you wish.

return result;
}

关于asp.net-web-api - 查询后修改odata结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29953323/

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