Предложение Linq-to-Objects Where с 2 предикатами - PullRequest
4 голосов
/ 28 мая 2011

Лучше ли иметь 2 предложения Where или 1 Where с оператором && или это не имеет значения?

list.Where(x => x.Prop1 == value1).Where(x => x.Prop2 == value2).ToList();

Или

list.Where(x => x.Prop1 == value1 && x.Prop2 == value2).ToList();

1 Ответ

5 голосов
/ 28 мая 2011

Лучше использовать второй с двумя тестами в одной лямбде. Он зацикливает список только один раз и вызывает делегата только вдвое реже. Первая версия зацикливает список дважды.

Просто чтобы прояснить, это лучший вариант:

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>, вы, как правило, получите еще лучший результат (если не будете читать его снова и снова).

...