C Sharp LINQ 方法语法
外观
简介[编辑 | 编辑源代码]
LINQ(Language Integrated Query,语言集成查询)是C#中用于查询数据的强大技术,它允许开发者使用类似SQL的语法或链式方法调用来操作集合、数据库、XML等数据源。方法语法(Method Syntax)是LINQ的两种主要表达方式之一(另一种是查询语法),它通过扩展方法(如Where()
、Select()
)实现链式调用,更符合函数式编程风格。
方法语法的核心特点:
- 基于Lambda表达式,代码更紧凑。
- 支持所有LINQ操作(包括查询语法无法直接表达的操作,如
Count()
、First()
)。 - 可与其他C#代码无缝结合。
基础方法语法示例[编辑 | 编辑源代码]
以下示例展示如何用方法语法过滤和转换数据:
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
}
}
- 代码解释**:
1. Where(n => n % 2 == 0)
:过滤出偶数(Lambda表达式作为谓词)。
2. Select(n => n * n)
:将每个元素平方。
3. 方法链的执行是延迟的(惰性求值),直到遍历结果时才实际计算。
常用LINQ方法[编辑 | 编辑源代码]
以下是方法语法中高频操作符的分类说明:
过滤操作[编辑 | 编辑源代码]
Where()
:根据条件筛选元素。OfType<T>()
:筛选指定类型的元素。
投影操作[编辑 | 编辑源代码]
Select()
:转换元素形式。SelectMany()
:展开嵌套集合(如将列表的列表扁平化)。
排序操作[编辑 | 编辑源代码]
OrderBy()
/OrderByDescending()
:升序/降序排序。ThenBy()
:次要排序条件。
聚合操作[编辑 | 编辑源代码]
Count()
/Sum()
/Average()
:统计计算。Aggregate()
:自定义累积运算。
分组与连接[编辑 | 编辑源代码]
GroupBy()
:按键分组。Join()
:内连接两个数据源。
实际应用案例[编辑 | 编辑源代码]
- 场景**:处理电商订单数据,统计每个客户的消费总额。
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}");
}
}
- 输出**:
Alice: $250 Bob: $200
方法语法 vs 查询语法[编辑 | 编辑源代码]
特性 | 方法语法 | 查询语法 |
---|---|---|
表达方式 | 链式方法调用 | SQL风格关键字 |
灵活性 | 支持所有操作 | 部分操作需结合方法语法(如Count() )
|
可读性 | 适合简单链式操作 | 复杂查询更直观 |
性能注意事项[编辑 | 编辑源代码]
- 延迟执行:LINQ查询通常延迟执行,直到实际迭代结果时才会计算。
- 立即执行:使用
ToList()
、ToArray()
或聚合方法(如Count()
)会立即触发查询。 - 复杂查询可能生成低效SQL(尤其在Entity Framework中),需监控生成的SQL语句。
进阶技巧[编辑 | 编辑源代码]
组合查询[编辑 | 编辑源代码]
方法语法可通过变量拆分复杂查询,提升可读性:
var filtered = collection.Where(x => x.IsActive);
var sorted = filtered.OrderBy(x => x.Name);
var final = sorted.Select(x => x.Id);
自定义扩展方法[编辑 | 编辑源代码]
通过扩展方法增强LINQ功能:
public static IEnumerable<T> WhereNotNull<T>(this IEnumerable<T> source)
{
return source.Where(item => item != null);
}
// 使用
var results = list.WhereNotNull();
总结[编辑 | 编辑源代码]
C# LINQ方法语法提供了灵活、强大的数据操作能力,尤其适合函数式编程风格。掌握核心方法(如Where
、Select
、GroupBy
)和延迟执行机制,能显著提升代码简洁性与效率。建议结合实际项目需求练习,逐步熟悉更高级的用法。