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

