加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 06:22:59 所属栏目:asp.Net 来源:网络整理
导读:我有一个返回IQueryable的MVC4 WebAPI控制器,因此我可以在URL中使用$filter和friends来操作REST端点的结果.这是我的控制器: public class EnrollmentController : ApiController{ [Queryable] public IQueryabletblEnrollment Get() { var context = new Pr
我有一个返回IQueryable的MVC4 WebAPI控制器,因此我可以在URL中使用$filter和friends来操作REST端点的结果.这是我的控制器:

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类型的参数并手动应用,而不是将您的操作标记为[可查询].这是它的样子:

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 };
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读