Рассмотрим аспекты производительности Entity Framework в целом:
- Загрузка и проверка данных имеют Низкий ¹ Относительная стоимость .
- Выполнение запроса также имеет Низкий ¹ Относительная стоимость
¹ [Общая стоимость увеличивается пропорционально количеству возвращаемых объектов по запросу].
И учитывая, что и
var users = _context.Users.Include(p => p.Photos)
.Where(p => p.Photos.Any())
.AsQueryable();
, и
var users = _context.Users.Include(p => p.Photos)
.Where(p => p.HasPhoto == true)
.AsQueryable();
возвращают идентичные результаты, фактическое время возврата будет считаться миллисекундами.
Однако , рассмотрим, что набор результатов является относительно большим, и рассмотрим метод расширения .Any()
LINQ
public static bool Any<TSource> (this System.Collections.Generic.IEnumerable<TSource> source)
и что этот метод не возвращает ни одного элемента коллекции. Вместо этого он определяет, содержит ли коллекция какие-либо элементы (следовательно, сокращается общее время выполнения).
Таким образом, в конечном итоге метод расширения Any()
будет работать лучше.