我可以在自定义.NET / EF控制器方法中轻松应用BreezeJS $过滤器吗?

时间:2017-03-03 18:18:06

标签: entity-framework asp.net-web-api breeze

我在breeze控制器上有一个自定义/专用的.NET控制器方法。它查询数据库(EF6)和一些处理并吐出结果。我们通过Breeze通过withParameters的几个自定义参数进行查询。

如果我们需要过滤EF查询,我们需要添加更多自定义参数。有没有办法获取正常的Breeze @filter参数并将其应用到我们自己的IQueryable?类似的东西:

var q = db.Widgets.Where(w => w.isAwesome);
q = Breeze.ApplyFilter(request, q);
var x = q.ToList();

我试图避免将所有字段添加为自定义参数,并避免将查询语法解析为EF可查询语句,因为已经完成(某处)。

1 个答案:

答案 0 :(得分:0)

关键是在方法中添加ODataQueryOptions参数。 WebAPI将使用已解析的过滤参数填充选项,并且可以在执行其他处理之前或之后将选项应用于IQueryable

[HttpGet]
public IList<Widget> Widgets(ODataQueryOptions queryOptions, bool coolOnly)
{
    IQueryable<Widget> q = db.Widgets.Where(w => w.isAwesome);
    if (coolOnly) {
        q = q.Where(w => w.isCool);
    }

    q = queryOptions.ApplyTo(q).Cast<Widget>();
    var list = q.ToList();

    return list;
}