c#-获取总结果计数并允许在与MongoDB的同一查询中进行分页
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-获取总结果计数并允许在与MongoDB的同一查询中进行分页,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1297字,纯文字阅读大概需要2分钟。
内容图文
我将查询设置为允许分页.在执行此操作的同时,我必须基本上运行两次相同的查询,以获取该查询的总匹配结果并允许分页.有什么办法可以将其组合成一个查询?
public SearchResult GetResults()
{
//query is built elsewhere
var totalResults = (from i in Collection.Find(query)
select i).Count();
var results = (from i in Collection.Find(query)
select i)
.Skip(recordsToSkip)
.Take(recordsToTake)
.ToList();
//SearchResult is defined elsewhere
return new SearchResult
{
Results = results,
TotalResults = totalResults
};
}
解决方法:
首先,要获得计数,您不应该执行linq查询,然后对结果进行计数.这种方法会枚举所有结果,然后对它们进行计数,这非常昂贵.您应该改用:
var totalResults = Collection.Find(query).Count()
此Count方法是在MongoCursor本身上定义的,它将以mongo而不是您的.Net应用程序中对结果进行计数.
我想那是问题背后的真正问题.但是,如果您仍然希望将这两个查询结合起来,可以这样进行:
var results = (from i in Collection.Find(query) select i).ToList();
var totalResults = results.Count();
var page = results
.Skip(recordsToSkip)
.Take(recordsToTake)
.ToList();
这样将获得整个集合,对其进行计数,然后返回其中的一页.但我不建议您这样做,因为您不需要整个集合.
P.S:在Find的结果上使用Linq时,它将在应用程序中而不是在数据库中进行过滤,因此您应该将查询更改为以下查询:
var results = Collection.Find(query)
.SetSkip(recordsToSkip)
.SetLimit(recordsToTake)
.ToList();
内容总结
以上是互联网集市为您收集整理的c#-获取总结果计数并允许在与MongoDB的同一查询中进行分页全部内容,希望文章能够帮你解决c#-获取总结果计数并允许在与MongoDB的同一查询中进行分页所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。