0

この LINQ ステートメント:

  string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
  var shortDigits = digits.Where((digit, index) => digit.Length < index);

このスタイルの LINQ に変換できます。

  var shortDigits  = from d in digits
                     ..........

はいの場合、方法を教えてください...

4

1 に答える 1

1

あなたが抱えている問題は、あなたが使用している場所の過負荷が流暢なクエリ構文でサポートされていないということです。

ただし、最初に選択を実行し、次のようにインデックスを結果に投影することで、これを回避できます。

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;
于 2012-09-12T11:51:57.730 に答える