MongoDB学习笔记~关于官方驱动集成IQueryable之后的一些事

回到目录

关于官方驱动集成IQueryable之后的一些事,有好事也有坏事,好事就是它会将你的linq语句非常友好的翻译成MongoDB语句,而坏事就是有一些linq语句不会被翻译,不会被翻译的代价就是将整个结果集装到内存,然后进行linq to object的查询,效率自然是非常低的,呵呵。

好事

最新官方驱动中,添加了对IQueryable扩展方法的支持

        public static IMongoQueryable<TDocument> AsQueryable<TDocument>(this IMongoCollection<TDocument> collection);

1 它对Where完成支持

_webManageUsersRepository.GetModel().Where(i => i.LoginName == "zzl");

2 它对group完全支持

 var g = _webManageUsersRepository.GetModel()
                .GroupBy(i => i.DepartmentID, (i, v) => new 
                {
                    dept = i,
                    userCount = v.Count()
                });

通过断点我们可以看到它所生成的mongodb语句,然后可以把语句放在命令行中去执行看看具体效果

坏事

对count()方法完成不支持,不推荐使用,如果要用到count(),建议使用mongo原生态的,而不是linq的

            Stopwatch sw1 = new Stopwatch();
            sw1.Restart();
            var a1 = _webManageUsersRepository.Count(i => true);//性能好
            sw1.Stop();
            var at1 = sw1.ElapsedMilliseconds;

            Stopwatch sw = new Stopwatch();
            sw.Restart();
            var a = _webManageUsersRepository.GetModel().Count();//性能差
            sw.Stop();
            var at = sw.ElapsedMilliseconds;

回到目录

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。