В код Open Source Project (OSP), который я вношу, есть несколько мест, где он должен быть определен, если элемент в коллекции удовлетворяет определенному условию.
Я видел использование выражения LINQ Any(lambda expression)
в некоторых случаях и FirstOrDefault(lambda expression) != null
в других, но никогда не думал об этом.
Теперь я достиг точки, где мне нужно сделать несколько итераций для коллекций, сделанных из запросов, в БД и хочу оптимизировать время выполнения.
Итак, я понял, что FirstOrDefault(lambda expression) != null
должен быть быстрее, чем Any(lambda expression)
, правильно?
В случае FirstOrDefault(lambda expression) != null
итерация (возможно) останавливается, когда находит элемент, который удовлетворяет условию (худший сценарий он выполняет итерацию по всей коллекции и возвращает null
).
В случае Any(lambda expression)
я предполагаю, что итерация продолжается до конца коллекции, даже если найден элемент, который удовлетворяет условию.
Изменить: вышеизложенное неверно, поскольку Джексон Папа упомянул и связал связанную статью MSDN.
Верны ли мои мысли или что-то не хватает?