asp.net - 如何根据内部数组使用 OData 进行过滤?

标签 asp.net asp.net-web-api odata

所以我使用 mvc4 web api 创建了一个 Controller ,其中 url (Get) “/api/things” 返回以下数据:

 <ArrayOfThing>
   <Thing>
   <Id>1</Id>
   <Description>The Thing Desc</Description>
   <Categories>
           <Category><Id>1</Id></Category>
          <Category><Id>2</Id></Category>
   </Categories>
  </Thing>
  <Thing>
   <Id>2</Id>
   <Description>The Other Thing Desc</Description>
   <Categories>
           <Category><Id>1</Id></Category>
           <Category><Id>3</Id></Category>
   </Categories>
  </Thing>
</ArrayOfThing>

*请注意,事物和类别具有多对多关系

我知道如果需要一个“事物”资源,我应该使用与以下路由 url (Get) “/api/things/{id}” 匹配的 Controller 。

但是,如果我想获取 url (Get) “/api/things” 返回的数据子集怎么办。我测试了修改 Controller 以返回 IQueryable 的 OData 协议(protocol),如果我想对“事物”的属性(如 Id 或描述)进行 $filter,它可以正常工作。不幸的是,当我想根据类别进行过滤时我没有解决,我相信是因为类别是一个内部数组。

那么,我应该怎么做才能根据类别进行过滤呢?

最佳答案

OData V3 支持任何/所有操作,您可以按集合属性对其进行筛选。例如,要过滤包含 Category(1) 的事物,使用以下语法:

/api/things/?$filter=Categories/any(category: category/Id eq 1)

如果您使用 ASP.net Web Api RTM 位,您可以使用 odata package支持任何/所有。更多示例,您可以查看可查询的示例代码:http://aspnet.codeplex.com/SourceControl/changeset/view/61dfed023e50#Samples%2fNet4%2fCS%2fWebApi%2fODataQueryableSample%2fProgram.cs

关于asp.net - 如何根据内部数组使用 OData 进行过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12284244/

相关文章:

asp.net-web-api - Web 应用程序和 Web API 有什么区别?

javascript - 如何使用 React.js 映射 GET 方法响应

Java、Spring 和 OData 休息服务

javascript - Breeze.js 到 ODATA Web API - CORS 请求失败

javascript - 如何从 javascript 触发服务器端事件?

c# - 我可以从 HttpContext 获取当前执行的 Controller 吗?

javascript - 如何通过YouTube API获取 "Top tracks for (artist)"URL?

jquery - 使用 jQuery jsonp 跨域调用 ASP.NET Web 服务

c# - 屏幕分辨率和滚动条

asp.net-web-api - 使用ASP.NET MVC 6 WebAPI从Auth0获取用户信息