【问题标题】:Can I easily apply a BreezeJS $filter within a custom .NET/EF controller method?我可以在自定义 .NET/EF 控制器方法中轻松应用 BreezeJS $filter 吗?
【发布时间】:2017-03-04 04:43:11
【问题描述】:

我在微风控制器上有一个自定义/专门的 .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 可查询对象中,因为这已经完成(某处)。

【问题讨论】:

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


    【解决方案1】:

    关键是在您的方法中添加一个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;
    }
    

    【讨论】:

    • 嗯,我试过了,但它是空的,而 $filter 中有一个 eq 子句。
    • 你需要在你的控制器类上有[BreezeController]属性,和/或你的Widgets方法上有[BreezeQueryable]属性。这告诉 WebAPI 将方法视为可查询的,并添加 ODataQueryOptions 参数。
    • 我们实际上有[EnableBreezeQuery(MaxExpansionDepth = 6)];这是错误的属性(或单独的)?
    • 您使用了正确的属性; BreezeQueryable 是旧版本。
    • 上面的代码可以和 NHibernate 一起工作吗?我使用 NHContext 并且我的 IQueryable 是 NHibernate.Linq.NhQueryable 但是当执行 ApplyTo 时我收到错误 Cannot visit a constant without a constant to parameter map
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2017-04-15
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多