Быстрее возьми запись в linq
Пожалуйста, посмотрите этот запрос
return ContextDb.TestTbl.AsNoTracking().Where(x =>
x.Field1 == newsPaperGroupId).OrderByDescending(x => x.ShowDateTime).Take(count).ToList();
Это получить все записи, а затем взять n записи?
Есть ли более быстрый способ сделать этот запрос?
1 ответ
LINQ использует отложенное выполнение, что означает, что он не получает результаты сразу - только до тех пор, пока вы не вызовете такие методы, как ToList()
, Single()
, Count()
или выполнить итерацию запроса с foreach
петля и т. д.
Если бы ваш запрос выглядел так, то на самом деле он собирал бы все записи, где Field1 == newsPaperGroupId
прежде чем принимать count
во внимание.
return ContextDb.TestTbl.AsNoTracking()
.Where(x => x.Field1 == newsPaperGroupId)
.OrderByDescending(x => x.ShowDateTime)
.ToList()
.Take(count);
И если бы это выглядело так, то все было бы захвачено TestTbl
(ой) перед применением фильтра или ограничением количества принятых записей.
return ContextDb.TestTbl.AsNoTracking()
.ToList()
.Where(x => x.Field1 == newsPaperGroupId)
.OrderByDescending(x => x.ShowDateTime)
.Take(count);
Но то, что у тебя есть, выглядит хорошо. Он не извлекает фактические данные, пока вы не примените фильтр и не ограничите количество извлекаемых записей.