1) Они генерируют один и тот же байт-код?
2) Если нет, есть ли преимущество в использовании одного над другим в определенных обстоятельствах?
// LINQ select statement
return from item in collection
select item.Property;
// foreach in an iterator block
foreach (item in collection)
yield return item.Property;