我正在使用Breezejs作为客户端JavaScript。我不确定在使用已应用过滤器(where子句)的Breezejs(使用IQueryable的服务器端)时如何获得查询的总计数。
答案 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.推动。问题和你的所有贡献。谢谢。