Выражения запроса охватывают только небольшое подмножество операторов LINQ и применимы только в том случае, если в руки включено действительное выражение, а не, скажем, Func<T, bool>
в качестве предиката, и в этом случае все становитсянекрасиво.Поэтому вместо того, чтобы писать:
Func<Foo, bool> predicate = ...; // Get predicate from somewhere
var query = from x in collection
where predicate(x)
select x;
Я бы лучше написал:
Func<Foo, bool> predicate = ...; // Get predicate from somewhere
var query = collection.Where(predicate);
Существуют и другие случаи, когда использование синтаксиса выражений без запроса проще, особенно если ваш запрос толькоиспользует один оператор.
Выражения запроса эффективно переводятся в выражения, не являющиеся запросами, поэтому все, что вы можете сделать в выражениях запросов , может быть выражено в выражениях, не являющихся запросами.Используйте выражения запросов, где они делают код более простым и более читабельным;не используйте их там, где их нет.
У меня есть дополнительная информация о том, как работают выражения запросов в сообщении в блоге , которое может вас заинтересовать.