掌握 LINQ:通过示例解释 C# 中强大的 LINQ 集合运算
Language Integrated Query (LINQ) 是 C# 中一个强大的特性,用于查询和操作数据集合。LINQ 提供了一种简洁、类型安全和可读性高的方式来处理数据集合。本文将通过多个示例详细解释 LINQ 的集合运算,包括筛选、排序、分组、投影和连接。
一、LINQ 基础
LINQ 查询通常由以下部分组成:
- 数据源:要查询的集合。
- 查询:定义如何从数据源中提取信息。
- 执行:对查询进行遍历以检索数据。
示例数据源:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
二、筛选(Filtering)
筛选操作用于从数据源中选择符合条件的元素。
示例:选择所有偶数
var evenNumbers = from number in numbers
where number % 2 == 0
select number;
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
三、排序(Sorting)
排序操作用于对数据源中的元素进行排序。
示例:按升序排序
var ascendingNumbers = from number in numbers
orderby number
select number;
foreach (var num in ascendingNumbers)
{
Console.WriteLine(num);
}
示例:按降序排序
var descendingNumbers = from number in numbers
orderby number descending
select number;
foreach (var num in descendingNumbers)
{
Console.WriteLine(num);
}
四、分组(Grouping)
分组操作用于将数据源中的元素按指定的键进行分组。
示例:按奇偶分组
var groupedNumbers = from number in numbers
group number by number % 2 into numberGroup
select numberGroup;
foreach (var group in groupedNumbers)
{
Console.WriteLine(group.Key == 0 ? "Even numbers:" : "Odd numbers:");
foreach (var num in group)
{
Console.WriteLine(num);
}
}
五、投影(Projection)
投影操作用于从数据源中选择特定的元素或计算结果。
示例:选择数字的平方
var squaredNumbers = from number in numbers
select number * number;
foreach (var num in squaredNumbers)
{
Console.WriteLine(num);
}
六、连接(Joining)
连接操作用于将两个数据源的相关元素组合在一起。
示例:内连接
List<string> categories = new List<string> { "A", "B", "C" };
List<Product> products = new List<Product>
{
new Product { Name = "Apple", Category = "A" },
new Product { Name = "Banana", Category = "B" },
new Product { Name = "Carrot", Category = "C" },
new Product { Name = "Date", Category = "D" }
};
var innerJoin = from category in categories
join product in products on category equals product.Category
select new { Category = category, Product = product.Name };
foreach (var item in innerJoin)
{
Console.WriteLine($"Category: {item.Category}, Product: {item.Product}");
}
七、综合示例
结合多个 LINQ 操作进行综合示例。
示例:筛选、排序、分组和投影
var result = from number in numbers
where number % 2 == 0
orderby number descending
group number by number % 4 into numberGroup
select new
{
Remainder = numberGroup.Key,
Numbers = numberGroup
};
foreach (var group in result)
{
Console.WriteLine($"Numbers with remainder {group.Remainder} when divided by 4:");
foreach (var num in group.Numbers)
{
Console.WriteLine(num);
}
}
八、思维导图
LINQ 集合运算
│
├── 筛选(Filtering)
│ └── 示例:选择所有偶数
│
├── 排序(Sorting)
│ ├── 示例:按升序排序
│ └── 示例:按降序排序
│
├── 分组(Grouping)
│ └── 示例:按奇偶分组
│
├── 投影(Projection)
│ └── 示例:选择数字的平方
│
└── 连接(Joining)
└── 示例:内连接
九、总结
通过本文的示例,我们详细介绍了C#中LINQ的强大集合运算功能。LINQ提供了一种简洁、灵活和类型安全的方式来查询和操作数据集合,从而大大提高了代码的可读性和可维护性。希望本文能帮助读者更好地掌握和应用LINQ,提高开发效率。