Counts in Breeze.js

2019-04-29 21:04发布

I have a complex query that returns item counts. If I run a query on the client, will it always return the objects, or is there a way to just return the item counts without sending the object array in the payload? I tried doing something like

var query = breeze.EntityQuery.from('Items').inlineCount(true);

but that still pulls all the records down. Any solutions?

3条回答
闹够了就滚
2楼-- · 2019-04-29 21:31

I don't know if this exactly answers your question, but you would need to query the records in order to know how many there are (to my knowledge, there may be a more efficient way to tie Breeze directly into a SQL command that is way over my head) so you could do something like -

var query = breeze.EntityQuery.from('Items')
    .take(0)
    .inlineCount(true);

Edited the answer - this would return no objects and simply get the count.

查看更多
我命由我不由天
3楼-- · 2019-04-29 21:48

The inlineCount answer already provided is absolutely correct.

Another alternative is to calculate the counts on the server and just send down the "summary". For example this server side controller method will return an array of two element objects to the client:

  [HttpGet]
  public Object CustomerCountsByCountry() {
    return ContextProvider.Context.Customers.GroupBy(c => c.Country).Select(g => new {g.Key, Count = g.Count()});
  }

This would be called via

  EntityQuery.from("CustomerCountsByCountry")
     .using(myEntityManager).execute()
     .then(function(data) {

     var results = data.results;
     results.forEach(function(r) {
       var country = r.Key;
       var count = r.Count
     });

  });
查看更多
ゆ 、 Hurt°
4楼-- · 2019-04-29 21:49

var query = breeze.EntityQuery.from('Items') .take(0) .inlineCount(true);

查看更多
登录 后发表回答