我在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可查询语句,因为已经完成(某处)。
答案 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;
}