我正在使用Web API,我在创建查询以根据过滤器撤回数据方面苦苦挣扎。经典的例子是根据外键撤回一个项目列表。
我们说我有以下实体:
Movie
======
id
directorId
categoryId
使用以下方法构建DAO并不罕见:
MovieRepo.GetByDirector(int directoryId);
MovieRepo.GetByCategory(int category);
最近,我一直在使用Linq和实体框架来构建可供多个调用客户端使用的检索方法,但其返回的列表可以根据传递给过滤器的条件进行过滤
public IEnumerable<Movie> Get(MovieFilter filter){
IQueryable<Movie> query = _context.tblMovie;
if(!String.IsNullOrEmpty(filter.directorId))
query.Where(m => m.directoryId == filter.directorId);
if(!String.IsNullOrEmpty(filter.categoryId))
query.Where(m => m.categoryId == filter.categoryId);
return query.ToList();
}
样板Web API控制器操作是:
IEnumerable<Movie> Get();
Movie Get(int id)
如果我想使用Web API按目录或类别过滤我的查询,我究竟会以RESTful方式执行此操作?鉴于路由解析的方式,以下将是一个模糊的调用:
IEnumerable<Movie> GetByCategory(int categoryId);
我没有看到很多指导,有人可以为我提供一些吗?
此致
克里斯
答案 0 :(得分:1)
其中一种方法是使用OData协议http://www.odata.org/docs/
还有一个支持OData过滤的库http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api,支持查询IQueryable
接口
可以看出它有点复杂,但你获得了很多。 OData标准的一部分:
老实说,我们正在使用OData
...而不使用IQueryable和MS库。我们刚刚创建了自己的解析器,只支持有限的东西。但是有OData
标准