我可能遗漏了一些简单的东西,但根据这篇博文:http ://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options这应该正在工作。我有以下控制器方法:
public virtual IQueryable<DtoAgent> Get(ODataQueryOptions<Agent> options, bool includeInactive = false, bool includeDeleted = false)
{
IQueryable<Agent> agents = null;
if (includeDeleted && includeInactive)
{
agents = agentRepository.FindAll();
}
else if (includeDeleted)
{
agents = agentRepository.FindBy(a => a.ussiStatus == "A");
}
else if (includeInactive)
{
agents = agentRepository.FindBy(a => !a.IsDeleted);
}
if (agents == null)
{
agents = agentRepository.FindByExp(a => a.ussiStatus == "A" && !a.IsDeleted);
}
options.ApplyTo(agents);
return agents.ToDtos<DtoAgent>();
}
当我像 ../api/Agent?$top=10 一样调用它时,它会返回所有结果,而不仅仅是 10。我可以在 options 变量中看到 TopQueryOption,但它似乎没有被应用。如果我使用 [Queryable] 属性,它会起作用,但顶部是在我试图避免的 DB 调用之后应用的。我在全局级别调用 EnableQuerySupport 并安装了 Nuget 包和 2012.2 更新。谢谢你的帮助。