我正在使用oData作为web api项目。这是我的代码:
[HttpGet]
[EnableQuery]
[Route("sessions")]
public IQueryable<Session> Get()
{
var sessions = this.sessionRepository.GetAllSessions();
return sessions.AsQueryable();
}
public class Session
{
public long Id {get;set;}
public string Name {get;set;}
}
这很好用:
当我像这个mydomain / api / sessions一样调用api时,我会得到所有的会话 当我像这样调用api mydomain / api / sessions?$ filter = Name eq&#39; session test&#39;时,我只得到名称等于&#39; session test&#39;。< / p>
此代码的问题在于,无论用户执行的请求(没有过滤器,过滤器,顶部或其他任何内容),第一个&#34;选择*&#34;执行 在db中,然后使用oData的QueryableAttribute,对从第一个大请求获得的结果执行过滤器&#34; select *&#34;。 我的问题如下:是否可以直接在数据库中执行用户给出的查询,而不是先执行select *,然后对此结果执行过滤。
提前感谢您的帮助。