Приводит ли преобразование DbSet к IEnumerable к выполнению запроса?

У меня есть следующие 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();

Теперь проблема в том, что я получаю огромную разницу в производительности в группе по оператору в зависимости от того, какой из методов репо я вызываю.

  • getAllSet, который возвращает DbSet, работает молниеносно,
  • GetAll возвращает IEnumerable очень медленно.

Кто-нибудь может это объяснить. Я думал, что преобразование DbSet в IEnumerable в GetAll приводило к выполнению запроса, и, следовательно, я выполнял группу с массивным набором памяти. В то время как GetAllSet откладывал выполнение запроса до «ToList ()» и, следовательно, выполнял групповую работу на сервере.

Это верно? Есть ли другой способ объяснить это?

Я бы предпочел, чтобы GetAll возвращал IEnumerable, поскольку я лучше знаком с ним, и его немного легче тестировать.

6
задан surfmuggle 11 November 2016 в 17:34
поделиться