无论如何在控制器中应用用户查询以便对最终结果集执行某些操作?
采用以下示例:
[HttpGet]
public IQueryable<Container> Containers(bool populate)
{
var containers = _contextProvider.Context.Containers;
if (populate)
{
foreach (var container in containers)
{
container.Populate(_contextProvider.Context);
}
}
return containers;
}
这里的问题是我对此表中的所有记录执行此Populate()
操作,而不仅仅是用户请求的记录,因为他们的查询尚未应用。我怎样才能做到这一点?
答案 0 :(得分:2)
您需要将ODataQueryOptions传递给您的方法,这样您就可以手动应用它们,而不是让WebApi在出路时应用它们。
[HttpGet]
public IQueryable<Container> Containers(ODataQueryOptions options, bool populate)
{
IQueryable<Container> containers = _contextProvider.Context.Containers;
containers = options.ApplyTo(Containers).Cast<Container>();
if (populate)
{
foreach (var container in containers)
{
container.Populate(_contextProvider.Context);
}
}
return containers;
}