Лучше использовать второй с двумя тестами в одной лямбде. Он зацикливает список только один раз и вызывает делегата только вдвое реже. Первая версия зацикливает список дважды.
Просто чтобы прояснить, это лучший вариант:
list.Where(x => x.Prop1 == value1 && x.Prop2 == value2).ToList();
Который также можно написать
var results =
(from x in list
where x.Prop1 == value1 && x.Prop2 == value2
select x).ToList();
Если вы можете избежать вызова .ToList()
и использовать его как IEnumerable<T>
, вы, как правило, получите еще лучший результат (если не будете читать его снова и снова).