C# Linq 详解二
发布人:shili8
发布时间:2024-11-21 22:37
阅读次数:0
**C# Linq详解二**
在前一篇文章中,我们已经介绍了 C# Linq 的基本概念、语法和常用方法。然而,Linq 还有很多更深入的内容需要我们去探索。在本文中,我们将继续讨论 Linq 的一些高级特性和实践应用。
###1. 分组和聚合分组是指根据某个条件,将数据集合中的元素分成不同的组。聚合则是指对每个组进行计算或操作,得到一个结果值。在 C# 中,我们可以使用 `GroupBy` 方法来实现分组,然后使用 `Aggregate` 或 `Sum` 等方法来进行聚合。
csharpusing System; using System.Collections.Generic; using System.Linq; public class Student{ public string Name { get; set; } public int Age { get; set; } } class Program{ static void Main() { var students = new[] { new Student { Name = "张三", Age =18 }, new Student { Name = "李四", Age =19 }, new Student { Name = "王五", Age =20 }, new Student { Name = "赵六", Age =21 } }; // 分组 var groupedStudents = students.GroupBy(s => s.Age); // 聚合 var averageAge = groupedStudents.Average(g => g.Key); Console.WriteLine("平均年龄:" + averageAge); // 聚合(使用 Sum 和 Count) var totalAge = groupedStudents.Sum(g => g.Count()); Console.WriteLine("总年龄:" + totalAge); } }
###2. 连接和合并连接是指将两个或多个数据集合中的元素组合起来。合并则是指根据某个条件,将两个或多个数据集合中的元素合并成一个新的集合。在 C# 中,我们可以使用 `Join` 方法来实现连接,然后使用 `DefaultIfEmpty` 等方法来进行合并。
csharpusing System; using System.Collections.Generic; using System.Linq; public class Order{ public int Id { get; set; } public string CustomerName { get; set; } } public class Product{ public int Id { get; set; } public string Name { get; set; } } class Program{ static void Main() { var orders = new[] { new Order { Id =1, CustomerName = "张三" }, new Order { Id =2, CustomerName = "李四" }, new Order { Id =3, CustomerName = "王五" } }; var products = new[] { new Product { Id =1, Name = "苹果" }, new Product { Id =2, Name = "橙子" }, new Product { Id =3, Name = "香蕉" } }; // 连接 var joinedOrders = orders.Join(products, o => o.Id, p => p.Id, (o, p) => new { OrderId = o.Id, CustomerName = o.CustomerName, ProductName = p.Name }); // 合并(使用 DefaultIfEmpty) var mergedOrders = orders.DefaultIfEmpty().Select(o => new { OrderId = o.Id, CustomerName = o.CustomerName, ProductName = "未知" }); Console.WriteLine("合并结果:"); foreach (var order in mergedOrders) { Console.WriteLine(order.OrderId + " " + order.CustomerName + " " + order.ProductName); } } }
###3. 排序和分页排序是指根据某个条件,将数据集合中的元素按一定顺序排列。分页则是指将数据集合分成多个页,每页包含一定数量的元素。在 C# 中,我们可以使用 `OrderBy` 和 `Skip` 等方法来实现排序和分页。
csharpusing System; using System.Collections.Generic; using System.Linq; public class Student{ public string Name { get; set; } public int Age { get; set; } } class Program{ static void Main() { var students = new[] { new Student { Name = "张三", Age =18 }, new Student { Name = "李四", Age =19 }, new Student { Name = "王五", Age =20 }, new Student { Name = "赵六", Age =21 } }; // 排序 var sortedStudents = students.OrderBy(s => s.Age); Console.WriteLine("排序结果:"); foreach (var student in sortedStudents) { Console.WriteLine(student.Name + " " + student.Age); } // 分页(使用 Skip 和 Take) var paginatedStudents = students.Skip(1).Take(2); Console.WriteLine("分页结果:"); foreach (var student in paginatedStudents) { Console.WriteLine(student.Name + " " + student.Age); } } }
###4. 过滤和转换过滤是指根据某个条件,将数据集合中的元素过滤掉。转换则是指将数据集合中的元素从一种类型转换成另一种类型。在 C# 中,我们可以使用 `Where` 和 `Select` 等方法来实现过滤和转换。
csharpusing System; using System.Collections.Generic; using System.Linq; public class Student{ public string Name { get; set; } public int Age { get; set; } } class Program{ static void Main() { var students = new[] { new Student { Name = "张三", Age =18 }, new Student { Name = "李四", Age =19 }, new Student { Name = "王五", Age =20 }, new Student { Name = "赵六", Age =21 } }; // 过滤 var filteredStudents = students.Where(s => s.Age >18); Console.WriteLine("过滤结果:"); foreach (var student in filteredStudents) { Console.WriteLine(student.Name + " " + student.Age); } // 转换(使用 Select) var convertedStudents = students.Select(s => new { Name = s.Name, Age = s.Age *2 }); Console.WriteLine("转换结果:"); foreach (var student in convertedStudents) { Console.WriteLine(student.Name + " " + student.Age); } } }
### 总结本文介绍了 C# Linq 的一些高级特性和实践应用,包括分组、聚合、连接、合并、排序、分页、过滤和转换。这些方法可以帮助我们更有效地处理数据集合,并且可以与其他 Linq 方法结合使用,以实现更加复杂的操作。