C# LINQ Where
最后修改时间:2024 年 2 月 1 日
在本文中,我们将展示如何使用 LINQ 的 Where 方法和 where 子句在 C# 中过滤序列。
语言集成查询 (LINQ) 是一种特定领域的语言,用于查询来自各种数据源的数据,包括数组、列表、XML 文件或数据库。
where 子句或 Where 方法基于谓词过滤一系列值。谓词是返回布尔值的单参数函数。
此方法是延迟计算的。 在枚举对象之前,不会执行查询。
C# LINQ Where 简单示例
第一个示例是一个使用 LINQ Select 的简单程序。
Program.cs
List<int> vals = [-3, -1, 0, 3, 2, 1, -6, 5, 9];
var res = vals.Where(e => e > 0);
Console.WriteLine(string.Join(',', res));
该程序定义了一个整数列表。 我们过滤掉所有正值。
var res = vals.Where(e => e > 0);
Where 方法将给定的谓词函数应用于每个元素。 它返回满足给定条件的值序列。 在我们的例子中,条件是该值大于零。
$ dotnet run 3,2,1,5,9
C# LINQ Where with Func 谓词
Func 是一个内置的泛型委托类型。 它可与方法、匿名方法或 lambda 表达式一起使用。
Program.cs
Func<int, bool> isNeg = e => e < 0;
List<int> vals = [-3, -1, 0, 3, 2, 1, -6, 5, 9];
var res = vals.Where(isNeg);
Console.WriteLine(string.Join(',', res));
该程序将 Func 委托应用于列表的元素。 我们过滤掉所有负值。
$ dotnet run -3,-1,-6
C# LINQ where 子句
查询表达式是另一种 LINQ 语法。 在查询表达式中,我们使用 where 子句来过滤数据。
Program.cs
List<string> words = [ "sky", "forest", "war", "buy",
"crypto", "cup", "water", "cloud" ];
var res = from word in words
where word.StartsWith('c')
select word;
Console.WriteLine(string.Join(',', res));
在该程序中,我们过滤掉所有以字母“c”开头的单词。
$ dotnet run crypto,cup,cloud
C# LINQ Where 带有多个条件
我们可以使用 and/or 运算符组合多个条件。
Program.cs
List<User> users =
[
new ("John", "Doe", 1230),
new ("Lucy", "Novak", 670),
new ("Ben", "Walter", 2050),
new ("Robin", "Brown", 2300),
new ("Amy", "Doe", 1250),
new ("Joe", "Draker", 1190),
new ("Janet", "Doe", 980),
new ("Albert", "Novak", 1930),
];
var res = users.Where(u => (u.LastName.StartsWith('D') ||
u.LastName.StartsWith('W')) && u.Salary > 1000);
foreach (var e in res)
{
Console.WriteLine(e);
}
record User(string FirstName, string LastName, int Salary);
在该示例中,我们对过滤应用了三个条件。 我们只选择那些姓名以“D”或“W”开头且工资高于 1000 的用户。
$ dotnet run
User { FirstName = John, LastName = Doe, Salary = 1230 }
User { FirstName = Ben, LastName = Walter, Salary = 2050 }
User { FirstName = Amy, LastName = Doe, Salary = 1250 }
User { FirstName = Joe, LastName = Draker, Salary = 1190 }
来源
在本文中,我们介绍了 LINQ Where 操作。
作者
列出所有 C# 教程。