如何在Breezejs中获取TotalRows Count,以便我可以进行分页

时间:2012-12-01 20:47:19

标签: breeze

我正在使用Breezejs作为客户端JavaScript。我不确定在使用已应用过滤器(where子句)的Breezejs(使用IQueryable的服务器端)时如何获得查询的总计数。

4 个答案:

答案 0 :(得分:5)

从v 0.75.1开始,我们在EntityQuery中添加了一个新的'inlineCount'方法。有关更多详细信息,请参阅breeze API文档。希望这能满足您的需求。

答案 1 :(得分:2)

我们对Ward的解决方案做了一点改动,因为Enumerable.Count从db加载所有记录,不仅是count(我们在看了sql profiler之后意识到这一点)。

首先我们为IQueryable.Count扩展方法创建一个包装器(因为我们不能通过反射调用扩展方法)。

public static class QueryWrapper {
    public static int Count<T>(IQueryable<T> query) where T: class {
        return query.Count();
    }
}

我们改变了

if (actionExecutedContext.Request.RequestUri.Query.Contains("$inlinecount")) {
    if (dQuery is IQueryable) {
        inlineCount = Enumerable.Count(dQuery);
    }
}

使用此代码,

if (actionExecutedContext.Request.RequestUri.Query.Contains("$inlinecount")) {
    if (dQuery is IQueryable) {
        var method = typeof(QueryWrapper).GetMethod("Count");
        var genericMethod = method.MakeGenericMethod(elementType);
        inlineCount = (int)genericMethod.Invoke(null, new object[] { dQuery });
    }
}

在此更改之后,Entity Framework仅获取计数,而不是所有记录。

希望这有帮助。

度过愉快的一天。

答案 2 :(得分:1)

目前正在审核

Support $inlinecount in queries - 请投票支持。

答案 3 :(得分:1)

更新:$ inlineCount在v.0.75.1的Breeze中,使得这个答案过时了。

因此,我删除了我的答案,其中描述了一种解决方法(UmutÖzel在其答案中改进了一种解决方法)。新功能由S.O.推动。问题和你的所有贡献。谢谢。