В Entity Framework лучше использовать.First ()или.Take (1 )для «TOP 1»?

Мы реализуем несколько репозиториев данных EF, и у нас есть несколько запросов, которые могут включатьTOP 1

Я прочитал много сообщений, предлагающих использовать.Take(1)
Код, который я просматриваю, использует.First()

Я понимаю, что оба они дают один и тот же результат для назначения объекта, но действительно ли они оба разрешают один и тот же запрос? Когда запрашивается БД, будет ли это действительно TOP 1для обоих запросов? Или они будут выполнять запрос полностью в перечислимом, а затем просто брать первую запись в коллекции?

Кроме того, если мы использовали .FirstOrDefault(), то почему мы должны ожидать другого поведения? Я знаю, что при использовании IEnumerable вызов .First()для пустой коллекции вызовет исключение, но если это является фактически только изменением запроса для включения TOP 1, тогда я не должен ожидать абсолютно никакой функциональной разницы между .First()и .FirstOrDefault().... верно?

В качестве альтернативы, есть ли лучший метод, чем эти Enumerable extensions, для выполнения запроса TOP 1?

38
задан Matthew 4 May 2012 в 20:04
поделиться