GroupBy Mongodb与驱动程序C#

时间:2015-02-02 12:50:17

标签: c# linq mongodb

我正在创建一个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而不会进行大量查询吗?

谢谢!

1 个答案:

答案 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()
            });