C# LINQ(Language-Integrated
Query)是一种强类型、编译时的查询技术,它可以通过统一的语法对多种数据源进行查询和操作,包括对象、集合、数据库等。LINQ
提供了两种查询方式:查询语句和扩展方法。
查询语句(Query Syntax)是一种类似 SQL 的语法,使用关键字 from、where、orderby、select
等来构建查询语句。例如,查询一个整数集合中大于 10 的所有元素:
List<int> numbers = new List<int> { 2, 5, 10, 15, 20 }; var result = from n in
numbers where n > 10 select n; foreach (var item in result) {
Console.WriteLine(item); }
扩展方法(Method Syntax)是一种面向对象的链式方法调用方式,它使用 LINQ 扩展方法来对数据源进行操作,例如,同样查询一个整数集合中大于 10
的所有元素:
List<int> numbers = new List<int> { 2, 5, 10, 15, 20 }; var result =
numbers.Where(n => n > 10); foreach (var item in result) {
Console.WriteLine(item); }
两种方式本质上是等价的,都可以实现相同的查询功能,只是语法不同。查询语句更加直观易懂,适合初学者和简单的查询场景;扩展方法更加灵活,可以完成更复杂的查询操作,适合高级用户和复杂的查询场景。
LINQ 提供了很多查询方法,例如:Where、OrderBy、Select、Join、GroupBy
等,这些方法可以对数据源进行过滤、排序、投影、连接、分组等操作。以下是一些常用的 LINQ 方法:
* Where:用于根据指定条件过滤数据源,返回符合条件的元素集合。
* OrderBy、OrderByDescending:用于根据指定条件对数据源进行排序,返回排序后的元素集合。
* Select、SelectMany:用于对数据源进行投影操作,返回一个新的集合。
* Join、GroupJoin:用于根据指定条件连接两个数据源,返回连接后的元素集合。
* GroupBy:用于将数据源按照指定条件进行分组,返回分组后的元素集合。
以下是一个使用 LINQ 查询语句和方法对学生信息进行查询的例子:
class Student { public int Id { get; set; } public string Name { get; set; }
public int Age { get; set; } public string Gender { get; set; } } List<Student>
students = new List<Student> { new Student{ Id=1, Name="Tom", Age=18}, new
Student{ Id=2, Name="Jerry", Age=20}, new Student{ Id=3, Name="Kate", Age=22},
new Student{ Id=4, Name="Lucy", Age=20}, new Student{ Id=5, Name="Mary",
Age=18}, }; var query = students.Where(s => s.Age == 20); foreach (var student
in query) { Console.WriteLine(student.Name); }
输出结果为:
Jerry Lucy
其中,LINQ 查询语句 Where 用于筛选符合条件的元素,该语句使用 Lambda 表达式作为筛选条件。上述代码使用 Lambda 表达式 s =>
s.Age == 20 来筛选年龄为 20 岁的学生。方法 Where 返回的是一个 IEnumerable<Student> 对象,其中包含符合条件的元素。
最后,使用 foreach 遍历符合条件的学生,并输出学生的姓名。