C# 我们可以在LINQ查询中使用重载Where运算符吗?
此示例演示了一个索引Where子句,该子句返回名称小于其值的数字。 源代码C# 我们可以在LINQ查询中使用重载Where运算符吗?,c#,linq,C#,Linq,此示例演示了一个索引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)
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);
}
}
如何从上面的查询中获取索引值?否,重载
,其中运算符在查询语法中不可用。以下是引自:
在查询表达式语法中,where(visualc#)或where(visualc
Basic)子句转换为对
Where(IEnumerable,Func)
您可以手动引入索引:
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;
string[]位={“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”};
var shortDigits=来自数字对。选择((数字,索引)=>新建{数字,索引})
其中pair.digit.Length
可能的重复感谢的可能重复…还有其他选项吗?@user1849388我添加了指向msdn的链接,该链接指向如何将查询语法转换为Where运算符。问题是您应该在查询语法中将Func
传递给where子句。不能在此处添加其他参数。我仍然不明白为什么您不想使用Where((u,I)=>u.Length>I)
非常感谢。这正是我要找的。顺便问一下,他选择的和在哪里的有什么区别?我认为这两个操作符所做的工作是相同的?当您需要迭代枚举的所有元素并为这些元素返回某些内容(在我的示例中是一对值)时,通常使用Select。Where通常用于将枚举限制为满足给定条件的元素列表。我的回答对你考虑接受和投票是有用的。
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;