如何在不扩展导航属性的情况下在Navigational上获得InlineCount。 我需要的只是计数,我不想要降低子实体的开销。
我想模仿像这样的SQL伪代码:
select
*,
(select count(*) from Child where ParentId = Parent.Id) as ChildCount
from Parent
where id = 305
答案 0 :(得分:1)
最简单的方法是在服务器上创建一个命名查询方法,如下所示(内置自定义计数逻辑)
[HttpGet]
public Int32 OrdersCountForCustomer(string companyName) {
var customer =
MyContextProvider.Context.Customers.Include("Orders").Where(c => c.CompanyName.StartsWith(companyName)).First();
return customer.Orders.Count;
}
然后从客户端查询它:
var query = EntityQuery.from("OrdersCountForCustomer").withParameters({ companyName: "IBM" });
em.executeQuery(query).then(function (data) {
var count = parseInt(data.results[0]);
});
答案 1 :(得分:1)
您不需要特殊的" OrdersCountForCustomer"为此目的的终点!
相反,您可以发出一个返回0结果的查询。
breeze.EntityQuery.from('Orders')
.where('customerId', 'eq', theId)
.take(0)
.inlineCount(true)
.using(em).execute()
.then(function (data) {
var count = data.inlineCount;
});
我意识到这可能会解决数据层上的两个SQL请求(一个是查询零记录而另一个是计数),并且此类请求可能的可扩展性较低。但它的简单,通用,可扩展,可能不是实践中的性能问题,猜测会让你害怕。
答案 2 :(得分:0)
试试这个:
var query = EntityQuery.from("OrdersCountForCustomer").withParameters ({companyName: "IBM" }).inlineCount(true);
em.executeQuery(query).then(function (data) {
var count = data.inlineCount;
});