Dav*_*hel 6 entity-framework dbset
我的Logs存储库中有以下两种方法.
public IEnumerable<Log> GetAll()
{
var db = new CasLogEntities();
return db.Logs;
}
public DbSet<Log> GetAllSet()
{
var db = new CasLogEntities();
return db.Logs;
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是一个返回一个IEnumerable的Log,另一个返回一个DbSet的Log.
在我的资产控制器中,我有以下代码
var allLogs = _logRepo.GetAllSet();
var Logs = (from log in allLogs
group log by log.DeviceId
into l
select new {DeviceId = l.Key, TimeStamp = l.Max(s => s.TimeStamp)}).ToList();
Run Code Online (Sandbox Code Playgroud)
现在问题是我在group by语句中获得了巨大的性能差异,这取决于我调用哪个repo方法.
任何人都可以解释一下.我当时认为在GetAll中将DbSet转换为IEnumerable导致Query执行,因此我在一个庞大的内存集中执行该组.而当GetAllSet将查询执行推迟到"ToList()"时,因此在服务器上通过工作来执行该组.
它是否正确?还有另一种解释方法吗?
我更喜欢让GetAll返回IEnumerable,因为我对它更熟悉并且它更容易进行测试.
Cra*_*ntz 10
不,转换为IEnumerable<T>不会导致它执行.
这不,在另一方面,把查询到的对象的空间,所以生成的SQL将是不同的,当你投射到一个匿名类型.观察SQL Server Profiler以查看差异.
这可以解释性能差异.
如果您返回IQueryable<T>而不是IEnumerable<T>,则SQL /性能应该相同.
| 归档时间: |
|
| 查看次数: |
7262 次 |
| 最近记录: |