【发布时间】:2016-02-16 17:46:52
【问题描述】:
这是通过 EF 提供程序使用 BreezeJS 和 Breeze 控制器。我有几个相关的实体,我们称它们为客户,它有一个名为 Orders 的导航属性,它链接到该客户的一组订单实体。
我希望在 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();
文档建议您可以以某种方式链接扩展,但我还没有找到有效的语法。
理想情况下,我想通过 Order 上的一个名为 Status 的属性(例如 0(不完整))将 where 应用于 Orders,然后只给我那些匹配的 Orders 的计数。即,将所有客户实体返回给我,但每个实体都有一个匹配的订单计数(而不是整个订单对象列表和过滤客户端)。
如果可以实现,将不胜感激任何正确方向的指针。我目前的想法是,我必须在服务器端控制器上创建一个自定义方法并在那里完成工作,但在我对 OData 可以支持的内容做出假设之前,我想我会在这里检查以进行确认。
【问题讨论】:
-
显然,一种选择是取回与第一个谓词匹配的所有客户,然后为所有具有匹配 customer.id 且状态为 0 的订单实体在客户端执行另一个查询。到目前为止,虽然有很多客户匹配该名称,但事实证明这很慢,所以寻找建议的选项
标签: breeze