BreezeJs导航属性计数

时间:2015-02-05 05:30:43

标签: breeze

我刚刚开始使用BreezeJS并认为它非常棒。它为我节省了很多后端和管道。代码就是我首先调查它的原因。我希望能够做的事情之一是显示一些帐户的列表和他们的联系人的计数。目前我正在使用下面的代码,“联系人”字段是EF6中的导航属性。这段代码的问题是,我正在下载每个帐户的所有联系人(数千个),而我真正需要的只是计数。理想情况下,我希望我的select语句类似于这样的选项(' AccountID,AccountName,Contacts.Count()')'但我不认为OData / BreezeJS支持这一点。大声思考可能解决方案是创建另一个名为AccountsWithContactCounts的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 () {
        });

我的微风服务看起来像这样:

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

1 个答案:

答案 0 :(得分:2)

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

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