BreezeJs 导航 属性 计数

BreezeJs Navigation Property Count

我刚开始使用 BreezeJS,觉得它很棒。它为我节省了很多后端 'plumbing' 代码,这就是我首先研究它的原因。我希望能够做的一件事是显示一些帐户的列表和他们的联系人数量。目前我正在使用下面的代码,联系人字段是 EF6 中的导航 属性。这段代码的问题是,当我真正需要的只是计数时,我正在下载每个帐户(数千个)的所有联系人。理想情况下,我希望我的 select 声明是这样的 '.select('AccountID,AccountName, Contacts.Count()')' 但我认为 OData/BreezeJS 不支持这一点。大声思考也许解决方案是创建另一个名为 AccountsWithContactCounts 和 return 自定义 class 的 WebService 方法,但理想情况下,如果可以在 breezejs客户端。

欢迎提出任何想法,如果这是一个基本问题,我们深表歉意。

breeze.EntityQuery.from('Accounts')
        .where(pred)
        .select('AccountID,AccountName, Contacts')
        .orderBy(orderbyClause(orderBy, orderByReverse))
        .skip(currentPage * pageItems)
        .take(pageItems)
        .noTracking()
        .using(breezemanager).execute()
        .then(function (response) {
            console.log(response.results.length + ' entities retrieved');
            $scope.items = response.results;
        })
        .catch(function (error) {
            console.log(error.message);
        })
        .finally(function () {
        });

我的 breeze 服务如下所示:

  [HttpGet]
    public IQueryable<Account> Accounts()
    {
        return _contextProvider.Context.Accounts;
    }

史蒂夫确认答案是在 Breeze 控制器上创建一个新方法

 [HttpGet]
    public IQueryable<object> AccountsSummary()
    {
        return from t in _contextProvider.Context.Accounts
            select
                new
                {
                    t.AccountID,
                    t.AccountName,
                    ContactsCount = t.Contacts.Count()
                };
    }