我正在创建一个stadistics模块,我需要使用Count进行GroupBy操作以按国家/地区访问总访问者。我正在使用MongoRepository(Link to Library)
我在C#中使用此代码工作正常,但我不喜欢这个解决方案:
var repositoryIpFrom = new MongoRepository<IpFrom>();
var countries = repositoryIpFrom.Where(s => s.id == id).Select(s => s.Country).Distinct();
foreach (var country in countries)
{
statisticsCountryDto.Add(new StatisticsCountryDto()
{
Country = country,
Count = repositoryIpFrom.Count(s => s.id == id && s.Country == country)
});
}
return statisticsCountryDto;
这个与Linq一起(但它不起作用......错误说GroupBy不受支持)
var tst = repositoryIpFrom.Where(s=>s.id == id).GroupBy(s => s.Country).Select(n => new
{
Country = n.Key,
Count = n.Count()
});
我可以有任何选项来制作GroupBy而不会进行大量查询吗?
谢谢!
答案 0 :(得分:2)
由于您没有过滤查询,因此可以通过插入AsEnumerable
操作来解析查询,然后在不再涉及MongoDb驱动程序后对本地数据执行分组操作。
var tst = repositoryIpFrom
.Where(s=>s.id == id)
.AsEnumerable()
.GroupBy(s => s.Country)
.Select(n => new
{
Country = n.Key,
Count = n.Count()
});