这个示例演示了一个索引的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 Query的格式来写吗?
from u in digits where u.Length>index select u;
这里如何从上面的查询中获得INDEX值?
查询语法中没有重载的Where
操作符。下面是来自msdn:
在查询表达式语法中,where (Visual c#)或where (Visual c#)基本)子句翻译为对的调用
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);
我不明白为什么不使用它
试试这个:
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;