Быстрее возьми запись в 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);

Но то, что у тебя есть, выглядит хорошо. Он не извлекает фактические данные, пока вы не примените фильтр и не ограничите количество извлекаемых записей.

Другие вопросы по тегам