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