此示例演示索引的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;
这里如何从Query上面获取INDEX值?
答案 0 :(得分: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;
但请记住,您还应在每次查询调用之前手动重置索引。无论如何 - 如果你需要索引,那么流畅的API是你的最佳选择:
var query = digits.Where((u, i) => u.Length > i);
我认为没有任何理由不使用它。
答案 1 :(得分: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;