LINQの得手不得手?

シーケンス中の値が0の要素のインデックス番号をすべて求めるコード。

普通の書き方。

int[] numbers = { 9, 0, 7, 6, 0, 4, 0, 2, 1 };

List<int> blankIndeces = new List<int>();
int count = 0;
foreach ( int value in numbers )
{
	if ( value == 0 )
		blankIndeces.Add( count );
	count++;
}

LINQ

int[] numbers = { 9, 0, 7, 6, 0, 4, 0, 2, 1 };

var blankIndices = numbers.
	Select( (n, index) => new { Index = index, Value = n } ).
	Where( pair => pair.Value == 0 ).
	Select( pair => pair.Index );

LINQ版はまどろっこしい。こんなコードになるんなら、わざわざLINQで書かないし。Selectが2つってのもキモイかも。もっとスマートに書けないでしょうか?

id:siokoshou:20070416#p2のnsharpさんのコメントも似たようなコード。

要素が元々持っていない値を扱うのが苦手なのかな。indexのようにSelectやWhereが供給してくれる値であっても、なんだかまだるっこしい感じ。
データベースに詳しくないのでわからないけど、きっとSQLのSELECTも同じような傾向があるんだろうなぁ。