ZetCode

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 }

来源

Enumerable.Where 方法

在本文中,我们介绍了 LINQ Where 操作。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。 我自 2007 年以来一直在撰写编程文章。 迄今为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程