我正在将 Breezejs 用于客户端 JavaScript。我不确定在使用应用了过滤器(where 子句)的 Breezejs(使用 IQueryable 的服务器端)时如何获取查询总数。
问问题
1793 次
4 回答
5
从 v 0.75.1 开始,我们向 EntityQuery 添加了一个新的“inlineCount”方法。有关详细信息,请参阅微风 API 文档。希望这将提供您所需要的。
于 2012-12-07T20:53:09.947 回答
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 });
}
}
在此更改之后,实体框架仅获得计数,而不是所有记录。
希望这可以帮助。
祝你今天过得愉快。
于 2012-12-06T14:41:22.913 回答
1
更新: $inlineCount 从 v.0.75.1 开始在微风中,使这个答案过时了。
因此,我删除了我的回答,其中描述了一种解决方法(Umut Özel 在他的回答中改进了一种解决方法)。新功能是由这个 SO 问题和您的所有贡献驱动的。谢谢你。
于 2012-12-02T19:48:33.467 回答
1
支持 $inlinecount 查询目前正在审核中 - 请投票支持。
于 2012-12-01T23:20:54.707 回答