あなたが抱えている問題は、あなたが使用している場所の過負荷が流暢なクエリ構文でサポートされていないということです。
ただし、最初に選択を実行し、次のようにインデックスを結果に投影することで、これを回避できます。
var digitsWithIndex = digits.Select((d, i) => new { Digit = d, Index = i });
次に、流暢なクエリ構文でインデックスを使用できます。
var query = from d in digitsWithIndex
where d.Digit.Length < d.Index
//just select the digit, we don't need the index any more
select d.Digit;
これにより、「5」、「6」、「7」、「8」、「9」の結果が得られます。
この状況では、ラムダ構文を使用することをお勧めしますが、それは私の個人的な好みです。
これが私がLinqPadでノックアップした完全なコードです:
var digits = new []
{
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
};
var digitsWithIndex = digits.Select((d, i) => new { Digit = d, Index = i });
var query = from d in digitsWithIndex
where d.Digit.Length < d.Index
//just select the digit, we don't need the index any more
select d.Digit;