在LINQ查询中可以使用重载Where操作符吗?

本文关键字:Where 操作符 重载 LINQ 查询 可以使 | 更新日期: 2023-09-27 17:49:01

这个示例演示了一个索引的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值?

在LINQ查询中可以使用重载Where操作符吗?

查询语法中没有重载的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;