Из этих двух вариантов:
var result = from c in coll where c % 2 == 0 select c;
var result = coll.Where ( c => c % 2 == 0 );
Что предпочтительнее?
Есть ли преимущество в использовании одного над другим? Для меня второй выглядит лучше, но я хотел бы услышать мнение других людей.
Если у вас есть только одно или два предложения, я бы пошел на "точечную нотацию". Когда вы начинаете делать объединения, группировки или что-либо еще, что вводит прозрачные идентификаторы, синтаксис запросов начинает привлекать гораздо больше.
Часто стоит попробовать в обоих направлениях и посмотреть, что наиболее читаемо для этой конкретной ситуации.
В терминах сгенерированного кода в большинстве случаев они будут одинаковыми. Иногда возникает перегрузка, которую вы можете использовать в точечной нотации, которая делает ее более простой, чем синтаксис выражения запроса, но читаемость значений по всему остальному в большинстве случаев.
У меня также есть сообщение в блоге на эту тему. Я определенно рекомендовал бы, чтобы разработчики были удобны с обоими параметрами - я был бы очень обеспокоен, если бы коллега использовал LINQ, но не понимал основы того, какие выражения запроса были, например. (Им не нужно знать каждый перевод, но некоторые идеи о том, что происходит, сделают их жизнь намного проще.)
Я всегда использую синтаксис лямбда, потому что для меня это яснее, что на самом деле происходит, и это выглядит здорово для загрузки. Но у нас есть несколько разработчиков, которые всегда делают обратное (sql nerds я думаю:) К счастью, такие инструменты, как ReSharper, могут просто преобразовываться между ними с помощью щелчка.