跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C Sharp LINQ 方法语法
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:C# LINQ方法语法}} {{编程概念导航}} == 简介 == '''LINQ(Language Integrated Query,语言集成查询)'''是C#中用于查询数据的强大技术,它允许开发者使用类似SQL的语法或链式方法调用来操作集合、数据库、XML等数据源。'''方法语法(Method Syntax)'''是LINQ的两种主要表达方式之一(另一种是查询语法),它通过扩展方法(如<code>Where()</code>、<code>Select()</code>)实现链式调用,更符合函数式编程风格。 方法语法的核心特点: * 基于Lambda表达式,代码更紧凑。 * 支持所有LINQ操作(包括查询语法无法直接表达的操作,如<code>Count()</code>、<code>First()</code>)。 * 可与其他C#代码无缝结合。 == 基础方法语法示例 == 以下示例展示如何用方法语法过滤和转换数据: <syntaxhighlight lang="csharp"> using System; using System.Linq; using System.Collections.Generic; class Program { static void Main() { List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 }; // 方法语法:筛选偶数并平方 var result = numbers .Where(n => n % 2 == 0) .Select(n => n * n); Console.WriteLine(string.Join(", ", result)); // 输出: 4, 16, 36 } } </syntaxhighlight> **代码解释**: 1. <code>Where(n => n % 2 == 0)</code>:过滤出偶数(Lambda表达式作为谓词)。 2. <code>Select(n => n * n)</code>:将每个元素平方。 3. 方法链的执行是延迟的(惰性求值),直到遍历结果时才实际计算。 == 常用LINQ方法 == 以下是方法语法中高频操作符的分类说明: === 过滤操作 === * <code>Where()</code>:根据条件筛选元素。 * <code>OfType<T>()</code>:筛选指定类型的元素。 === 投影操作 === * <code>Select()</code>:转换元素形式。 * <code>SelectMany()</code>:展开嵌套集合(如将列表的列表扁平化)。 === 排序操作 === * <code>OrderBy()</code> / <code>OrderByDescending()</code>:升序/降序排序。 * <code>ThenBy()</code>:次要排序条件。 === 聚合操作 === * <code>Count()</code> / <code>Sum()</code> / <code>Average()</code>:统计计算。 * <code>Aggregate()</code>:自定义累积运算。 === 分组与连接 === * <code>GroupBy()</code>:按键分组。 * <code>Join()</code>:内连接两个数据源。 == 实际应用案例 == **场景**:处理电商订单数据,统计每个客户的消费总额。 <syntaxhighlight lang="csharp"> using System; using System.Linq; using System.Collections.Generic; class Order { public int OrderId { get; set; } public string Customer { get; set; } public decimal Amount { get; set; } } class Program { static void Main() { List<Order> orders = new List<Order> { new Order { OrderId = 1, Customer = "Alice", Amount = 100 }, new Order { OrderId = 2, Customer = "Bob", Amount = 200 }, new Order { OrderId = 3, Customer = "Alice", Amount = 150 } }; var customerSpending = orders .GroupBy(o => o.Customer) .Select(g => new { Customer = g.Key, Total = g.Sum(o => o.Amount) }); foreach (var item in customerSpending) Console.WriteLine($"{item.Customer}: ${item.Total}"); } } </syntaxhighlight> **输出**: <pre> Alice: $250 Bob: $200 </pre> == 方法语法 vs 查询语法 == {| class="wikitable" |+ 对比表 ! 特性 !! 方法语法 !! 查询语法 |- | 表达方式 || 链式方法调用 || SQL风格关键字 |- | 灵活性 || 支持所有操作 || 部分操作需结合方法语法(如<code>Count()</code>) |- | 可读性 || 适合简单链式操作 || 复杂查询更直观 |} == 性能注意事项 == * '''延迟执行''':LINQ查询通常延迟执行,直到实际迭代结果时才会计算。 * '''立即执行''':使用<code>ToList()</code>、<code>ToArray()</code>或聚合方法(如<code>Count()</code>)会立即触发查询。 * 复杂查询可能生成低效SQL(尤其在Entity Framework中),需监控生成的SQL语句。 == 进阶技巧 == === 组合查询 === 方法语法可通过变量拆分复杂查询,提升可读性: <syntaxhighlight lang="csharp"> var filtered = collection.Where(x => x.IsActive); var sorted = filtered.OrderBy(x => x.Name); var final = sorted.Select(x => x.Id); </syntaxhighlight> === 自定义扩展方法 === 通过扩展方法增强LINQ功能: <syntaxhighlight lang="csharp"> public static IEnumerable<T> WhereNotNull<T>(this IEnumerable<T> source) { return source.Where(item => item != null); } // 使用 var results = list.WhereNotNull(); </syntaxhighlight> == 总结 == C# LINQ方法语法提供了灵活、强大的数据操作能力,尤其适合函数式编程风格。掌握核心方法(如<code>Where</code>、<code>Select</code>、<code>GroupBy</code>)和延迟执行机制,能显著提升代码简洁性与效率。建议结合实际项目需求练习,逐步熟悉更高级的用法。 [[Category:编程语言]] [[Category:C Sharp]] [[Category:C Sharp LINQ]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:编程概念导航
(
编辑
)