У меня есть следующие 2 метода в моем репозитории журналов.
public IEnumerable<Log> GetAll()
{
var db = new CasLogEntities();
return db.Logs;
}
public DbSet<Log> GetAllSet()
{
var db = new CasLogEntities();
return db.Logs;
}
Единственная разница в том, что один возвращает IEnumerable of Log, а другой — DbSet of Log.
В My Asset Controller у меня есть следующий код
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();
Теперь проблема в том, что я получаю огромную разницу в производительности в группе по оператору в зависимости от того, какой из методов репо я вызываю.
Кто-нибудь может это объяснить. Я думал, что преобразование DbSet в IEnumerable в GetAll приводило к выполнению запроса, и, следовательно, я выполнял группу с массивным набором памяти. В то время как GetAllSet откладывал выполнение запроса до «ToList ()» и, следовательно, выполнял групповую работу на сервере.
Это верно? Есть ли другой способ объяснить это?
Я бы предпочел, чтобы GetAll возвращал IEnumerable, поскольку я лучше знаком с ним, и его немного легче тестировать.