Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Web API和带有外键的查询_Asp.net_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

Asp.net Web API和带有外键的查询

Asp.net Web API和带有外键的查询,asp.net,asp.net-mvc,asp.net-web-api,Asp.net,Asp.net Mvc,Asp.net Web Api,我在玩弄Web API,在创建查询以基于过滤器提取数据方面有点困难。经典的例子是基于外键回调项目列表 假设我有以下实体: Movie ====== id directorId categoryId 使用以下方法构建DAO对我来说并不少见: MovieRepo.GetByDirector(int directoryId); MovieRepo.GetByCategory(int category); 最近,我一直在使用Linq和实体框架来构建检索方法,这些方法可以被多个调用客户机使用,但其返回

我在玩弄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();
}
public IEnumerable Get(电影过滤器){
IQueryable查询=_context.tblMovie;
如果(!String.IsNullOrEmpty(filter.directorId))
其中(m=>m.directoryId==filter.directorId);
如果(!String.IsNullOrEmpty(filter.categoryId))
其中(m=>m.categoryId==filter.categoryId);
返回query.ToList();
}
样板Web API控制器操作包括:

IEnumerable<Movie> Get();
Movie Get(int id)
IEnumerable Get();
电影获取(int-id)
如果我想用Web API按目录或类别过滤查询,我应该如何以RESTful方式进行过滤?考虑到解决路由问题的方式,以下调用将是不明确的:

IEnumerable<Movie> GetByCategory(int categoryId);
IEnumerable GetByCategory(int categoryId);
我在这方面没有太多的指导,有人能给我提供一些吗

问候,


Chris

其中一种方法是使用OData协议

还有一个支持OData筛选的库,支持通过
IQueryable
接口进行查询

它可以被看作是一个更复杂的一点,但你得到了很多。OData标准的部分内容:

  • $filter-根据布尔条件筛选结果
  • $select-应选择哪些列/属性
  • $inlinecount-告诉服务器在响应中包含匹配实体的总数。(对于服务器端分页非常有用。)
  • $orderby-对结果进行排序
  • $skip-跳过前n个结果
  • $top-仅返回结果的前n个

老实说,我们使用的是
OData
。。。而不使用IQueryable和MS库。我们刚刚创建了自己的解析器,只支持有限的东西。但是现在有了标准,我希望人们忘记OData的存在,把它当作一个协议。我们不使用IQueryable,而是使用标准。用谷歌的angularjs。很好的经验。你感觉到了吗OData和谷歌的javascript库。和NHibernate;)