第九章 生产线上的黑科技

第九章 生产线上的黑科技

LINQ

什么是LINQ?

LINQ(语言集成查询)是将查询功能直接集成到C#中。提供了一种统一的方式来查询不同来源的数据——无论是数组、集合、数据库、XML 还是其他格式。通过在 C# 中使用 LINQ,不再需要学习多种查询语言来处理不同的数据格式。

LINQ中的许多方法(如 Where, Select)本质上是扩展方法。

// 设定数据源
var numbers = new List<int> { 1, 2, 3, 4, 5 };

// 调用扩展方法
string result = numbers.ToFormattedString();

// 输出:1, 2, 3, 4, 5
Console.WriteLine(result);

public static class CollectionExtensions
{
    public static string ToFormattedString<T>(this IEnumerable<T> collection)
    {
        return string.Join(", ", collection);
    }
}

LINQ的基本组成

在C#中,LINQ主要由以下几个组成部分:

  1. 数据源(Data source):可以是集合、数组、数据库、XML文档等等。
  2. 查询变量(Query variable):用于存储查询结果的变量。
  3. 查询表达式(Query expression):类似于SQL语句的查询表达式,用于描述查询的逻辑和条件。
  4. 查询操作符(Query operator):用于执行各种查询操作,如筛选、排序、分组、投影等等。
  5. 查询结果(Query result):查询操作的返回结果。

LINQ用法

  1. 查询语法
    LINQ提供了一种类似SQL语法的查询方式,可以通过from、where、select等关键字来编写查询表达式。例如,我们有一个包含学生信息的集合,可以使用以下方式查询名字以"A"开头的学生:
List<string> students = new List<string> { "Alice", "Bob", "Charlie", "Amy" };

var query = from student in students
            where student.StartsWith("A")
            select student;

foreach (var student in query)
{
    Console.WriteLine(student);
}
  1. 方法语法
    除了查询语法,LINQ还提供了方法语法,可以通过一系列的方法调用来实现查询操作。方法语法通常使用Lambda表达式来定义查询条件。以下是使用方法语法查询名字以"A"开头的学生的示例:
List<string> students = new List<string> { "Alice", "Bob", "Charlie", "Amy" };

var query = students.Where(s => s.StartsWith("A"));

foreach (var student in query)
{
    Console.WriteLine(student);
}

例子

  1. Select:将序列中的每个元素投影到新的形式。
    Select:这个函数用于将序列中的每个元素投影到新的形式。例如,你可以使用Select函数将一个整数列表中的每个元素乘以2。
List<int> numbers = new List<int> { 1, 2, 3, 4 };
var result = numbers.Select(n => n * 2);

// 输出结果: 2 4 6 8
foreach (var item in result)
{
    Console.WriteLine(item);
}
  1. Where:过滤序列中的元素。
    Where:这个函数用于过滤序列中的元素。例如,你可以使用Where函数找出一个整数列表中的所有偶数。
List<int> numbers = new List<int> { 1, 2, 3, 4 };
var result = numbers.Where(n => n % 2 == 0);

// 输出结果: 2 4
foreach (var item in result)
{
    Console.WriteLine(item);
}
  1. Aggregate:将序列中的所有元素累积到一个单一的结果。
    Aggregate:这个函数用于将序列中的所有元素累积到一个单一的结果。例如,你可以使用Aggregate函数计算一个整数列表中的所有元素的总和。
List<int> numbers = new List<int> { 1, 2, 3, 4 };
int result = numbers.Aggregate((acc, n) => acc + n);

// 输出结果: 10
Console.WriteLine(result);
  1. Concat:连接两个序列。
    Concat:这个函数用于连接两个序列。
List<int> numbers1 = new List<int> { 1, 2, 3 };
List<int> numbers2 = new List<int> { 4, 5, 6 };
var result = numbers1.Concat(numbers2);

// 输出结果: 1 2 3 4 5 6
foreach (var item in result)
{
    Console.WriteLine(item);
}
  1. OrderBy和OrderByDescending:对序列中的元素进行排序。
    OrderBy和OrderByDescending:这两个函数用于对序列中的元素进行排序。
List<int> numbers = new List<int> { 3, 1, 4, 2 };
var ascendingResult = numbers.OrderBy(n => n);

// 输出结果: 1 2 3 4
foreach (var item in ascendingResult)
{
    Console.WriteLine(item);
}

var descendingResult = numbers.OrderByDescending(n => n);

// 输出结果: 4 3 2 1
foreach (var item in descendingResult)
{
    Console.WriteLine(item);
}
  1. GroupBy:根据指定的键对序列中的元素进行分组。
    GroupBy:这个函数用于根据指定的键对序列中的元素进行分组。
List<string> fruits = new List<string> { "apple", "banana", "cherry", "avocado" };
var result = fruits.GroupBy(f => f[0]);

// 输出结果:
// a: apple avocado
// b: banana
// c: cherry
foreach (var group in result)
{
    Console.WriteLine($"{group.Key}: {string.Join(" ", group)}");
}
posted @ 2025-05-26 18:18  冲浪的奶糖  阅读(8)  评论(0)    收藏  举报