跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C Sharp LINQ 基础
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= C# LINQ基础 = '''LINQ'''(Language Integrated Query,语言集成查询)是C#中的一项强大功能,它允许开发者使用类似SQL的语法直接在代码中查询数据,无论是来自集合、数据库、XML还是其他数据源。LINQ提供了一种统一的方式来查询和操作数据,使得代码更加简洁、可读性更高。 == 什么是LINQ? == LINQ是.NET框架的一部分,它扩展了C#语言,使得查询操作成为语言的一部分,而不再需要依赖外部查询语言(如SQL)。LINQ的主要特点包括: * '''强类型检查''':编译器可以在编译时检查查询语法,减少运行时错误。 * '''统一的查询语法''':无论是查询集合、数据库还是XML,语法基本一致。 * '''延迟执行''':查询只有在实际需要结果时才会执行,提高性能。 LINQ主要分为以下几类: * '''LINQ to Objects''':用于查询内存中的集合(如List、Array等)。 * '''LINQ to SQL''':用于查询关系型数据库(如SQL Server)。 * '''LINQ to XML''':用于查询和操作XML文档。 * '''LINQ to Entities''':用于Entity Framework中的查询。 == LINQ基础语法 == LINQ提供了两种查询语法: 1. '''查询表达式语法'''(类似于SQL语法)。 2. '''方法语法'''(使用扩展方法,如`Where`、`Select`等)。 === 查询表达式语法 === 查询表达式语法使用`from`、`where`、`select`等关键字来构建查询。 <syntaxhighlight lang="csharp"> // 示例:从一个整数列表中筛选出偶数并排序 List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var evenNumbers = from num in numbers where num % 2 == 0 orderby num descending select num; foreach (var num in evenNumbers) { Console.WriteLine(num); } </syntaxhighlight> '''输出:''' <pre> 10 8 6 4 2 </pre> === 方法语法 === 方法语法使用Lambda表达式和扩展方法(如`Where`、`Select`、`OrderBy`等)来构建查询。 <syntaxhighlight lang="csharp"> // 同样的示例,使用方法语法 List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var evenNumbers = numbers .Where(num => num % 2 == 0) .OrderByDescending(num => num); foreach (var num in evenNumbers) { Console.WriteLine(num); } </syntaxhighlight> '''输出:''' <pre> 10 8 6 4 2 </pre> == LINQ常用操作 == 以下是LINQ中常用的操作符及其作用: {| class="wikitable" |- ! 操作符 !! 描述 !! 示例 |- | '''Where''' || 过滤数据 || <code>numbers.Where(n => n > 5)</code> |- | '''Select''' || 投影数据(转换或提取字段) || <code>numbers.Select(n => n * 2)</code> |- | '''OrderBy''' || 升序排序 || <code>numbers.OrderBy(n => n)</code> |- | '''OrderByDescending''' || 降序排序 || <code>numbers.OrderByDescending(n => n)</code> |- | '''GroupBy''' || 分组数据 || <code>numbers.GroupBy(n => n % 2 == 0 ? "Even" : "Odd")</code> |- | '''Join''' || 连接两个数据源 || <code>list1.Join(list2, x => x.Id, y => y.Id, (x, y) => new { x.Name, y.Age })</code> |- | '''First''' / '''FirstOrDefault''' || 获取第一个元素 || <code>numbers.First(n => n > 5)</code> |- | '''Any''' || 检查是否存在符合条件的元素 || <code>numbers.Any(n => n > 5)</code> |- | '''Count''' || 计算符合条件的元素数量 || <code>numbers.Count(n => n > 5)</code> |} == 实际应用案例 == === 案例1:查询学生成绩 === 假设有一个学生列表,每个学生有姓名和成绩属性,我们可以使用LINQ查询成绩优秀的学生。 <syntaxhighlight lang="csharp"> class Student { public string Name { get; set; } public int Score { get; set; } } List<Student> students = new List<Student> { new Student { Name = "Alice", Score = 85 }, new Student { Name = "Bob", Score = 72 }, new Student { Name = "Charlie", Score = 90 }, new Student { Name = "David", Score = 65 } }; // 查询成绩大于80的学生并按成绩降序排列 var topStudents = students .Where(s => s.Score > 80) .OrderByDescending(s => s.Score); foreach (var student in topStudents) { Console.WriteLine($"{student.Name}: {student.Score}"); } </syntaxhighlight> '''输出:''' <pre> Charlie: 90 Alice: 85 </pre> === 案例2:分组统计 === 使用`GroupBy`对数据进行分组统计。 <syntaxhighlight lang="csharp"> // 按成绩等级分组(优秀、良好、及格、不及格) var groupedStudents = students .GroupBy(s => s.Score >= 90 ? "优秀" : s.Score >= 80 ? "良好" : s.Score >= 60 ? "及格" : "不及格"); foreach (var group in groupedStudents) { Console.WriteLine($"等级: {group.Key}"); foreach (var student in group) { Console.WriteLine($" {student.Name}: {student.Score}"); } } </syntaxhighlight> '''输出:''' <pre> 等级: 良好 Alice: 85 等级: 优秀 Charlie: 90 等级: 及格 Bob: 72 等级: 不及格 David: 65 </pre> == 延迟执行与立即执行 == LINQ查询分为两种执行方式: 1. '''延迟执行''':查询定义后不会立即执行,只有在遍历结果或调用`ToList()`、`ToArray()`等方法时才会执行。 2. '''立即执行''':调用聚合函数(如`Count`、`First`、`Average`等)会立即执行查询。 <syntaxhighlight lang="csharp"> // 延迟执行示例 var query = numbers.Where(n => n > 5); // 查询未执行 Console.WriteLine("查询已定义,但未执行"); foreach (var num in query) // 查询在此处执行 { Console.WriteLine(num); } // 立即执行示例 int count = numbers.Count(n => n > 5); // 查询立即执行 Console.WriteLine($"大于5的数字数量: {count}"); </syntaxhighlight> == 性能优化建议 == * 尽量使用延迟执行,避免不必要的计算。 * 对于频繁使用的查询结果,可以缓存(如使用`ToList()`或`ToArray()`)。 * 在数据库查询中,尽量使用`Select`只加载需要的字段,避免加载全部数据。 == 总结 == LINQ是C#中一个强大的工具,它简化了数据查询和操作,提高了代码的可读性和可维护性。无论是查询内存中的集合还是数据库,LINQ都提供了一致的语法。掌握LINQ的基础操作是成为高效C#开发者的关键一步。 在后续章节中,我们将深入探讨LINQ的高级用法,如连接查询、聚合操作和自定义扩展方法。 [[Category:编程语言]] [[Category:C Sharp]] [[Category:C Sharp LINQ]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)