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

您遇到的问题是流利的查询语法不支持您正在使用的 Where 的重载。

但是,您可以通过先执行选择并将索引投影到结果中来解决此问题,如下所示:

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;

这会产生结果“五”、“六”、“七”、“八”、“九”。

我认为在这种情况下,我建议坚持使用 lambda 语法,但这是我个人的偏好。

这是我在 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 回答