关于官方驱动集成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;
时间: 2024-11-06 03:55:14