gpt4 book ai didi

c# - RavenDB 获取查询的总计数不起作用

转载 作者:行者123 更新时间:2023-11-30 21:07:08 25 4
gpt4 key购买 nike

我在创建分页包装器的扩展方法中有这个逻辑:

        int total = 0;
if (query is IRavenQueryable<T>)
{
RavenQueryStatistics stats;
var rQuery = (IRavenQueryable<T>)query;
rQuery.Statistics(out stats);
total = stats.TotalResults;
}
else
{
total = query.Count();
}

我的问题是,当我执行 raven 查询时,我的 stats.TotalResults 为零,除非我在调试期间将鼠标悬停在 rQuery 上,并且尝试扩展结果。

我在这里做错了什么?如何让乌鸦始终如一地为我提供所需的结果?

这是整个方法:

    public static PagingModel<T> Page<T>(this IEnumerable<T> query, int page, int count)
{
if (page < 1)
throw new ArgumentOutOfRangeException("Page is one-based and must be greater than zero");

int total = 0;
if (query is IRavenQueryable<T>)
{
RavenQueryStatistics stats;
var rQuery = (IRavenQueryable<T>)query;
rQuery.Statistics(out stats);
total = stats.TotalResults;
}
else
{
total = query.Count();
}

var results = query
.Skip((page - 1) * count)
.Take(count)
.ToArray();

return new PagingModel<T>()
{
Page = page,
Rows = results,
Total = total /count
};
}

最佳答案

我自己想通了。事实证明,RavenQueryStatistics 通过引用设置了 TotalResults 并且总数仅在结果已解决后可用。 (我本来以为它单独跑了一趟DB。)

    public static PagingModel<T> Page<T>(this IEnumerable<T> query, int page, int count)
{
RavenQueryStatistics stats = null;
if (page < 1)
throw new ArgumentOutOfRangeException("Page is one-based and must be greater than zero");

if (query is IRavenQueryable<T>)
{
var rQuery = (IRavenQueryable<T>)query;
rQuery.Statistics(out stats);
}

var results = query
.Skip((page - 1) * count)
.Take(count)
.ToArray();
var total = stats == null ? query.Count() : stats.TotalResults;
return new PagingModel<T>()
{
Page = page,
Rows = results,
TotalPages = (int)Math.Ceiling((double)total / (double)count)
};
}

关于c# - RavenDB 获取查询的总计数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10675567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com