BreezeJS扩展实体计数
这是使用BreezeJS和Breeze控制器连接到EF提供者。我有几个相关的实体,让我们称它们为Customer,它有一个名为Orders的导航属性,该属性链接到该客户的一组订单实体 我想在UI上显示的是一组匹配部分名称搜索的客户的订单数量摘要。我可以通过返回所有Order对象来实现这一点,但它们都是相当大的对象,我不想在不需要的时候返回100个。inlineCount()方法似乎总是给出顶级实体(客户)的计数,而不是子实体的计数,无论我将其放在语句中的什么位置BreezeJS扩展实体计数,breeze,Breeze,这是使用BreezeJS和Breeze控制器连接到EF提供者。我有几个相关的实体,让我们称它们为Customer,它有一个名为Orders的导航属性,该属性链接到该客户的一组订单实体 我想在UI上显示的是一组匹配部分名称搜索的客户的订单数量摘要。我可以通过返回所有Order对象来实现这一点,但它们都是相当大的对象,我不想在不需要的时候返回100个。inlineCount()方法似乎总是给出顶级实体(客户)的计数,而不是子实体的计数,无论我将其放在语句中的什么位置 var predicate =
var predicate = breeze.Predicate.create('displayName', 'contains', partialName);
return this.entityQuery.from('Customers')
.where(predicate)
.orderBy('displayName')
.using(this.manager)
.expand('Orders')
.execute();
文档建议您可以以某种方式链接expand,但我还没有找到有效的语法
理想情况下,我希望通过一个名为Status of say 0(complete)的属性对订单应用where,然后只给出匹配订单的计数。即,返回所有客户实体,但每个实体都有一个匹配的订单计数(而不是整个订单对象列表和客户端过滤器)
如果有可能的话,我会很感激任何指向正确方向的指点。我目前的想法是,我必须在服务器端控制器上创建一个自定义方法并在那里进行工作,但在我假设OData可以支持什么之前,我想我应该在这里检查一下以获得一些确认。到目前为止,这是我最好的方法(如果有更好的方法,也许有人可以纠正我) 在服务器上,添加以下方法:
public IQueryable<object> CustomerSummaries()
{
return Context.Customers.Select(p => new
{
Customer = p,
ActiveOrderCount = p.Orders.Count(o => o.Status == 1)
});
}
显然,一个选项是获取与第一个谓词匹配的所有客户,然后在客户端对具有匹配customer.id和状态为0的所有订单实体执行另一个查询。到目前为止,这证明是相当缓慢的,虽然有很多客户匹配的名称,所以寻找建议的选项
var predicate = breeze.Predicate.create('customer.displayName', 'contains', partialName);
return this.entityQuery.from('CustomerSummaries')
.where(predicate)
.using(this.manager)
.execute();