Мы реализуем некоторые репозитории данных EF, и у нас есть несколько запросов, которые включают TOP 1
Я прочитал много сообщений, предлагающих использовать .Take(1)
Код, который я просматриваю, использует .First()
Я понимаю, что оба они дают одинаковый результат для назначения объекта, но оба они фактически разрешают один и тот же запрос? Когда запрашивается БД, будет ли это на самом деле с TOP 1
для обоих запросов? Или они полностью выполнит запрос в перечислимый, а затем просто возьмут первую запись в коллекции?
Кроме того, если мы использовали .FirstOrDefault()
, то почему мы должны ожидать какого-либо другого поведения? Я знаю, что при использовании IEnumerable вызов .First()
в пустую коллекцию будет выдаваться, но если это фактически только изменение запроса для включения TOP 1
, то я не должен ожидать абсолютно никакого функционального разницы между .First()
и .FirstOrDefault()
.... правильно?
В качестве альтернативы существует ли какой-то более эффективный метод, чем эти Перечислимые расширения для выполнения запроса TOP 1
?