BreezeJS:在控制器中应用客户端查询

BreezeJS: Applying Client Query in Controller

是否有在控制器中应用用户查询以便对最终结果集执行某些操作的方法?

举个例子:

[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;
}

这里的问题是我正在对 table 中的所有记录执行此 Populate() 操作,而不仅仅是用户请求的那些记录,因为他们的查询尚未应用。我怎样才能做到这一点?

您需要将 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;
}