gpt4 book ai didi

asp.net - 可以手动将 OData 参数应用于 `.AsQueryable()` 的结果吗?

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

我有一个返回 IQueryable 的 MVC4 WebAPI Controller ,因此我可以在 URL 中使用 $filter 等来操作来自 REST 端点的结果。这是我的 Controller :

public class EnrollmentController : ApiController
{
[Queryable]
public IQueryable<tblEnrollment> Get()
{
var context = new ProjectEntities();
context.ContextOptions.LazyLoadingEnabled = false;
return context.tblEnrollment.AsQueryable();
}
}

但是,就像 this poster ,我想让 JSON 输出格式有点不同,以便与 Ember Data 的预期格式更友好。所以我想返回这个:

return new { enrollment = context.tblEnrollment.AsQueryable() }; 

但是,这会破坏 OData 功能,因为我没有将 IQueryable 返回到 WebAPI 层。所以,我想知道是否有办法做这样的事情:

return new { enrollment = context.tblEnrollment.AsQueryable().ApplyOData() }; 

我确信这是真的......但是有没有某种方法可以针对 IQueryable 显式处理 OData 参数,而不是让 WebAPI 层隐式地执行此操作从 Get 方法返回的结果集?或者还有其他方法可以完成我想要的事情吗?

顺便说一句,我暂时停留在 EF4 上,因为我无法升级到 VS2012(因此无法升级到 .NET4.5,进而升级到 EF5)。理论上我可以升级到 EF 4.3.1(如果有帮助的话)。

最佳答案

您可以添加 ODataQueryOptions 类型的参数并手动应用它,而不是将操作标记为 [Queryable]。它可能如下所示:

public class EnrollmentController : ApiController
{
public object Get(ODataQueryOptions<tblEnrollment> query)
{
var context = new ProjectEntities();
context.ContextOptions.LazyLoadingEnabled = false;
var queryResults = query.ApplyTo(context.tblEnrollment.AsQueryable());
return new { enrollment = queryResults };
}
}

关于asp.net - 可以手动将 OData 参数应用于 `.AsQueryable()` 的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14477982/

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