您遇到的问题是流利的查询语法不支持您正在使用的 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;