Операторы Where Linq - Лучше, чтобы сложить или объединиться?

При записи цепочки метода для LINQ я могу сделать Где операторы один из двух путей:

var blackOldCats = cats.Where(cat => cat.Age > 7 && cat.Colour == "noir" )

Или

var blackOldCats = cats.Where(cat => cat.Age > 7).Where(cat => cat.Colour == "noir" )

Есть ли какие-либо преимущества одного по другому?

Не волнуйтесь слишком много о типах данных в этом примере, но если бы существуют проблемы с типами данных, то это было бы хорошо для знания также.

Очевидный - то, что на объект уже ссылаются, таким образом, два хита свойств сразу легче на приложении, правильно?

9
задан Dann 23 March 2010 в 22:53
поделиться

2 ответа

В вашем примере они такие же, и это вопрос личных предпочтений. Из-за отложенного выполнения LINQ коллекция будет повторяться только один раз.

Если вы хотите комбинировать выражения с помощью оператора или, вы можете использовать только первое из них.

3
ответ дан 3 November 2019 в 08:19
поделиться

Первый вариант будет немного быстрее, так как он несколько снижает накладные расходы. В остальном они обрабатываются практически таким же образом.

Одно заметное отличие состоит в том, что свойство Color сравнивается перед свойством Age во втором примере. Если вы хотите, чтобы более дешевое сравнение закоротило более дорогое (чтобы свойство Цвет сравнивалось только для элементов, для которых верно сравнение Возраст ), вы должны поместить более дешевый один в последнем Где вызов:

var blackOldCats =
  cats
  .Where(cat => cat.Colour == "noir")
  .Where(cat => cat.Age > 7);

В этом случае нет большой разницы в стоимости сравнений, но если одно намного дороже другого, полезно знать, в каком порядке они оцениваются.

0
ответ дан 3 November 2019 в 08:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: