BreezeJS扩展实体的数量

时间:2016-02-16 17:46:53

标签: breeze

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

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

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

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

理想情况下,我想在订单名称为0(不完整)的订单上通过属性应用订单的位置,然后只给我那些匹配订单的计数。即,返回所有客户实体,但每个客户实体具有匹配的订单计数(而不是整个订单对象列表和过滤客户端)。

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

1 个答案:

答案 0 :(得分:1)

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

在服务器上,添加以下方法:

  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();