LINQ(Language Integrated Query)即语言集成查询,是 C# 的一项强大特性,它允许你使用类似 SQL 的语法对各种数据源(如集合、数据库等)进行查询操作。下面为你详细介绍 LINQ 的一些常见用法:
1. 查询语法
查询语法类似于 SQL,使用from
、where
、select
等关键字来构建查询。
csharp
using System;
using System.Collections.Generic;
using System.Linq;class Program
{static void Main(){// 示例数据List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };// 查询所有偶数var evenNumbers = from num in numberswhere num % 2 == 0select num;// 输出结果foreach (var num in evenNumbers){Console.WriteLine(num);}}
}
在这个例子中,from num in numbers
指定了数据源,where num % 2 == 0
筛选出偶数,select num
选择要返回的元素。
2. 方法语法
方法语法使用扩展方法来构建查询,例如Where
、Select
等。
csharp
using System;
using System.Collections.Generic;
using System.Linq;class Program
{static void Main(){// 示例数据List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };// 查询所有偶数var evenNumbers = numbers.Where(num => num % 2 == 0);// 输出结果foreach (var num in evenNumbers){Console.WriteLine(num);}}
}
这里使用Where
方法筛选出偶数,num => num % 2 == 0
是一个 Lambda 表达式,用于定义筛选条件。
3. 投影操作
投影操作可以将查询结果转换为新的类型。
csharp
using System;
using System.Collections.Generic;
using System.Linq;class Person
{public string Name { get; set; }public int Age { get; set; }
}class Program
{static void Main(){// 示例数据List<Person> people = new List<Person>{new Person { Name = "Alice", Age = 25 },new Person { Name = "Bob", Age = 30 },new Person { Name = "Charlie", Age = 35 }};// 投影操作,只选择姓名var names = from person in peopleselect person.Name;// 输出结果foreach (var name in names){Console.WriteLine(name);}}
}
这个例子中,使用select person.Name
将Person
对象投影为姓名。
4. 分组操作
分组操作可以将数据按照某个键进行分组。
csharp
using System;
using System.Collections.Generic;
using System.Linq;class Program
{static void Main(){// 示例数据List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };// 按奇偶性分组var groups = from num in numbersgroup num by num % 2;// 输出结果foreach (var group in groups){Console.WriteLine($"Key: {group.Key}");foreach (var num in group){Console.WriteLine(num);}}}
}
这里使用group num by num % 2
将数字按奇偶性分组。
5. 连接操作
连接操作可以将两个数据源根据某个条件进行连接。
csharp
using System;
using System.Collections.Generic;
using System.Linq;class Department
{public int Id { get; set; }public string Name { get; set; }
}class Employee
{public int Id { get; set; }public string Name { get; set; }public int DepartmentId { get; set; }
}class Program
{static void Main(){// 示例数据List<Department> departments = new List<Department>{new Department { Id = 1, Name = "HR" },new Department { Id = 2, Name = "IT" }};List<Employee> employees = new List<Employee>{new Employee { Id = 1, Name = "Alice", DepartmentId = 1 },new Employee { Id = 2, Name = "Bob", DepartmentId = 2 }};// 连接操作var query = from emp in employeesjoin dept in departments on emp.DepartmentId equals dept.Idselect new { EmployeeName = emp.Name, DepartmentName = dept.Name };// 输出结果foreach (var result in query){Console.WriteLine($"Employee: {result.EmployeeName}, Department: {result.DepartmentName}");}}
}
这个例子中,使用join
关键字将Employee
和Department
两个集合根据DepartmentId
进行连接。
LINQ 提供了丰富的查询操作,能极大地简化数据处理和查询的代码,提高开发效率。