当前位置:实例文章 » C#开发实例» [文章]C# Linq 详解二

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 方法结合使用,以实现更加复杂的操作。

其他信息

其他资源

Top