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

实体框架 – WebApi OData:$filter’any’或’all’查询不起作

发布时间:2020-12-15 20:24:07 所属栏目:asp.Net 来源:网络整理
导读:首先,使用ASP.NET WebApi教程,我创建了一个基本的 ApiController that exposes an Entity Framework model through OData.该服务用于返回json for OData $filter查询. 当我对多值属性执行OData $filter queries that include “any” or “all”查询时会抛出
首先,使用ASP.NET WebApi教程,我创建了一个基本的 ApiController that exposes an Entity Framework model through OData.该服务用于返回json for OData $filter查询.

当我对多值属性执行OData $filter queries that include “any” or “all”查询时会抛出一个ODataException

这是我试图使用的OData查询

?/ api / Blogs?$filter = any(Tags,Name eq’csharp’)

我的ApiController看起来像这样:

public class BlogController : ApiController
{
    public BlogsController()
    {
        this.Entities = new BlogEntities();
    }

    public ContactEntities Entities { get; set; }

    [Queryable(PageSize = 25,AllowedQueryOptions = AllowedQueryOptions.All)]
    public IQueryable<Blog> Get()
    {
        return this.Entities.Blogs;
    }
}

博客实体有这个合同

public Blog {
    public Guid ID { get; set; }
    public string Title { get; set; }
    public Tag Tags { get; set; }
}

public Tag {
    public Guid ID { get; set; }
    public string Name { get; set; }
}

抛出异常

ODataException: Type 'Blog' does not have a property 'Name'

正如你所看到的,我的代码中没有什么是普通的,一切都应该正常工作.可能在Microsoft ASP.NET Web API OData中不支持“任何”和“全部”查询?

解决方法

你的任何需要改变一点.尝试这样的东西:
~/api/Blogs?$filter=Tags/any(tag: tag/Name eq 'csharp')

这是假设标签实际上返回一个标签的集合,而不仅仅是一个单一的标签,就像你以上.

$inlinecount仅支持OData格式的开箱即用.我在这里写道:

Web API OData Inlinecount not working

简单的答案是,您可以使其他格式的代码看起来像这样:

public PageResult<Customer> Get(ODataQueryOptions<Customer> queryOptions)
{
    IQueryable results = queryOptions.ApplyTo(_customers.AsQueryable());
    return new PageResult<Customer>(results as IEnumerable<Customer>,Request.GetNextPageLink(),Request.GetInlineCount());
}

(编辑:李大同)

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

    推荐文章
      热点阅读