【发布时间】:2013-06-09 04:27:31
【问题描述】:
我正在使用 Linq 创建 4 个对象集合:
var Restaurants = db.Places.Where(p => p.Tags.Any(t => t.Name == "Restaurant")).ToList();
var Bars = db.Places.Where(p => p.Tags.Any(t => t.Name == "Bar")).ToList();
var Pubs = db.Places.Where(p => p.Tags.Any(t => t.Name == "Pub")).ToList();
var Hotels = db.Places.Where(p => p.Tags.Any(t => t.Name == "Hotel")).ToList();
显然最好从数据库中读取一次,上面是在 SQL Server 2012 上打开 4 个连接和 4 个查询还是 1 个?
如果我改为执行以下操作,Entity Framework 是否只会从数据库中读取一次,我自己测试的最佳方法是什么?
var places = db.Places;
var Restaurants = places.Where(p => p.Tags.Any(t => t.Name == "Restaurant")).ToList();
var Bars = places.Where(p => p.Tags.Any(t => t.Name == "Bar")).ToList();
var Pubs = places.Where(p => p.Tags.Any(t => t.Name == "Pub")).ToList();
var Hotels = places.Where(p => p.Tags.Any(t => t.Name == "Hotel")).ToList();
这里的最佳实践是什么?有这方面的统计数据吗?
谢谢。
【问题讨论】:
-
这些似乎是等价的。两者都将导致对数据库的四次命中。如果您希望它们不同,则第二个代码块的开头应为:var places = db.places.ToList();
标签: sql-server asp.net-mvc linq entity-framework asp.net-mvc-4