跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C Sharp LINQ 操作符
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:C# LINQ操作符}} '''C# LINQ操作符'''(Language Integrated Query Operators)是.NET框架中一组强大的查询工具,允许开发者以声明式语法对集合、数据库、XML等数据源进行查询和转换操作。LINQ操作符分为两大类:'''标准查询操作符'''(Standard Query Operators)和'''扩展方法'''(Extension Methods),它们通过`System.Linq`命名空间提供。 == 概述 == LINQ操作符是C# LINQ的核心组成部分,它们定义了如何对数据序列进行筛选、排序、分组、聚合等操作。这些操作符通过链式调用(Fluent Syntax)或查询表达式(Query Expression Syntax)实现,底层基于IEnumerable<T>接口的扩展方法。 LINQ操作符可分为以下几类: * '''筛选操作符'''(如`Where`) * '''投影操作符'''(如`Select`) * '''排序操作符'''(如`OrderBy`) * '''分组操作符'''(如`GroupBy`) * '''聚合操作符'''(如`Sum`、`Average`) * '''连接操作符'''(如`Join`) * '''集合操作符'''(如`Union`、`Intersect`) == 主要LINQ操作符详解 == === 1. 筛选操作符(Where) === `Where`操作符用于根据条件过滤序列中的元素。 <syntaxhighlight lang="csharp"> // 示例:筛选偶数 int[] numbers = { 1, 2, 3, 4, 5 }; var evenNumbers = numbers.Where(n => n % 2 == 0); // 输出:2, 4 foreach (var num in evenNumbers) { Console.WriteLine(num); } </syntaxhighlight> === 2. 投影操作符(Select) === `Select`操作符将序列中的每个元素转换为新形式。 <syntaxhighlight lang="csharp"> // 示例:将数字转换为字符串 var numberStrings = numbers.Select(n => $"Number: {n}"); // 输出: // Number: 1 // Number: 2 // ... foreach (var str in numberStrings) { Console.WriteLine(str); } </syntaxhighlight> === 3. 排序操作符(OrderBy/ThenBy) === 排序操作符支持多级排序: <syntaxhighlight lang="csharp"> // 示例:多条件排序 var people = new[] { new { Name = "Alice", Age = 25 }, new { Name = "Bob", Age = 30 }, new { Name = "Charlie", Age = 25 } }; var sorted = people.OrderBy(p => p.Age).ThenBy(p => p.Name); // 输出: // Alice (25), Charlie (25), Bob (30) foreach (var person in sorted) { Console.WriteLine($"{person.Name} ({person.Age})"); } </syntaxhighlight> === 4. 分组操作符(GroupBy) === `GroupBy`创建基于键值的分组序列: <syntaxhighlight lang="csharp"> // 示例:按年龄分组 var groups = people.GroupBy(p => p.Age); foreach (var group in groups) { Console.WriteLine($"Age: {group.Key}"); foreach (var person in group) { Console.WriteLine($" - {person.Name}"); } } </syntaxhighlight> === 5. 聚合操作符 === 常用聚合操作包括`Count`、`Sum`、`Average`等: <syntaxhighlight lang="csharp"> // 示例:计算统计值 int[] data = { 10, 20, 30 }; Console.WriteLine($"Count: {data.Count()}"); // 3 Console.WriteLine($"Sum: {data.Sum()}"); // 60 Console.WriteLine($"Average: {data.Average()}"); // 20 </syntaxhighlight> == 延迟执行与立即执行 == LINQ操作符可分为两类执行方式: <mermaid> graph LR A[LINQ操作] --> B[延迟执行] A --> C[立即执行] B --> D[Where/Select等] C --> E[Count/ToList等] </mermaid> * '''延迟执行''':查询定义时不立即执行(如`Where`) * '''立即执行''':调用时立即返回结果(如`ToList`) == 实际应用案例 == === 案例1:电商产品筛选 === <syntaxhighlight lang="csharp"> // 假设products是商品集合 var filteredProducts = products .Where(p => p.Price < 100 && p.Category == "Electronics") .OrderBy(p => p.Price) .Select(p => new { p.Name, p.Price }); </syntaxhighlight> === 案例2:学生成绩分析 === <syntaxhighlight lang="csharp"> // 计算每个班级的平均分 var classAverages = students .GroupBy(s => s.Class) .Select(g => new { Class = g.Key, Average = g.Average(s => s.Score) }); </syntaxhighlight> == 高级主题 == === 自定义LINQ操作符 === 通过扩展方法创建自定义操作符: <syntaxhighlight lang="csharp"> public static IEnumerable<T> WhereGreaterThan<T>( this IEnumerable<T> source, T threshold) where T : IComparable<T> { return source.Where(item => item.CompareTo(threshold) > 0); } </syntaxhighlight> === 性能考虑 === * 避免在循环中重复执行LINQ查询 * 对于大型集合,考虑使用`AsParallel()`进行并行处理 == 数学基础 == 某些LINQ操作符基于数学概念: * `Select`对应数学中的<math>映射函数 f: A \rightarrow B</math> * `Where`实现<math>谓词函数 P: A \rightarrow \{true, false\}</math> == 总结 == {| class="wikitable" |+ LINQ操作符分类表 ! 类别 !! 操作符示例 |- | 筛选 | Where, OfType |- | 投影 | Select, SelectMany |- | 排序 | OrderBy, ThenBy |- | 分组 | GroupBy |- | 聚合 | Count, Sum, Average |} 掌握LINQ操作符可以显著提高C#开发效率和代码可读性。建议通过实际项目练习来巩固这些概念,并注意不同操作符的性能特性。 [[Category:编程语言]] [[Category:C Sharp]] [[Category:C Sharp LINQ]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)