BreezeJS 扩展实体计数



这是使用 BreezeJS 和 Breeze 控制器到 EF 提供程序。 我有几个相关的实体,我们称它们为客户,它具有一个名为订单的导航属性,该属性链接到该客户的一组订单实体。

我想在 UI 上显示的是与部分名称搜索匹配的一组客户的订单计数摘要。 我可以通过返回所有 Order 对象来做到这一点,但它们是非常大的对象,当我不需要时,我真的不想返回 100 个对象。 inlineCount() 方法似乎总是给出顶级实体(客户)的计数,而不是子实体的计数,无论我将其放在语句中的哪个位置。

var predicate = breeze.Predicate.create('displayName', 'contains', partialName);         
return this.entityQuery.from('Customers')
        .where(predicate)
        .orderBy('displayName')
        .using(this.manager)
        .expand('Orders')
        .execute();

文档建议你可以以某种方式链接扩展,但我还没有找到有效的语法。

理想情况下,我想通过订单上名为 Status of 0(不完整)的属性对订单应用一个 where,然后只给我这些匹配订单的计数。 即,向我返回所有 Customer 实体,但每个实体都有一个匹配的订单计数(而不是 Order 对象的整个列表和过滤器客户端)。

如果有可能实现,将不胜感激任何正确方向的指示。 我目前的想法是,我必须在服务器端控制器上创建一个自定义方法并在那里完成工作,但在我对 OData 可以支持的内容做出假设之前,我想我会在这里检查一些确认。

到目前为止,这是我最好的方法(如果有更好的方法,也许有人可以纠正我)。

在服务器上,添加此方法:

  public IQueryable<object> CustomerSummaries()
  {
     return Context.Customers.Select(p => new
                                          {
                                             Customer = p,
                                             ActiveOrderCount = p.Orders.Count(o => o.Status == 1)
                                          });
  }

然后在客户端:

     var predicate = breeze.Predicate.create('customer.displayName', 'contains', partialName);
     return this.entityQuery.from('CustomerSummaries')
        .where(predicate)
        .using(this.manager)
        .execute();

最新更新