0

此示例演示了一个索引 Where 子句,该子句返回名称短于其值的数字。源代码

public void Linq5() 
{ 
    string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; 

    var shortDigits = digits.Where((digit, index) => digit.Length < index); 

    Console.WriteLine("Short digits:"); 
    foreach (var d in shortDigits) 
    { 
        Console.WriteLine("The word {0} is shorter than its value.", d); 
    } 
}

现在我的问题是......我们可以用 LINQ 查询格式写这个,比如:

from u in digits where u.Length>index select u;

Here How to get the INDEX value from above Query?

4

2 回答 2

1

不,重载Where运算符在查询语法中不可用。这是来自msdn的引用:

在查询表达式语法中,where (Visual C#) 或 Where (Visual Basic) 子句转换为对 Where<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>)

您可以手动引入索引:

int index = 0;
var query = from u in digits 
            where u.Length > index++ 
            select u;

但请记住,您还应该在每次查询调用之前手动重置索引。无论如何 - 如果您需要索引,那么 fluent API 是您的最佳选择:

var query = digits.Where((u, i) => u.Length > i); 

我看不出有什么理由不使用它。

于 2012-12-20T10:00:37.963 回答
0

尝试这个:

string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };

var shortDigits = from pair in digits.Select((digit, index) => new { digit, index })
              where pair.digit.Length < pair.index
              select pair.digit;
于 2012-12-20T10:08:44.583 回答