c#编程:学习Linq,重几个简单示例开始

发布于:2025-02-23 ⋅ 阅读:(18) ⋅ 点赞:(0)

学习LINQ(Language Integrated Query)是掌握C#中数据处理和分析的重要一步。LINQ 提供了一种简洁、声明性的方式来查询和操作内存中的数据集合(如数组、列表等)以及数据库中的数据

以下是一些入门级的经典LINQ示例,帮助理解LINQ的基本概念和使用方法。

示例 1: 查询数组中的元素

假设你有一个整数数组,你想要找到所有的偶数。

csharp
using System;
using System.Linq;
 
class Program
{
    static void Main()
    {
        int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 
        // 使用LINQ查询偶数
        var evenNumbers = from number in numbers  //如果把number当做一个 数据库的表
                          where number % 2 == 0
                          select number;          //那么,这里Linq的语法 和 SQL非常类似!
 
        // 输出结果
        foreach (var number in evenNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

也可以使用扩展方法语法来实现相同的功能:

var evenNumbers = numbers.Where(number => number % 2 == 0);

示例 2: 查询字符串数组中的特定长度的字符串

假设有一个字符串数组,想要找到所有长度大于3的字符串。

csharp
using System;
using System.Linq;
 
class Program
{
    static void Main()
    {
        string[] words = { "apple", "bee", "cat", "dog", "elephant" };
 
        // 使用LINQ查询长度大于3的字符串
        var longWords = from word in words
                        where word.Length > 3
                        select word;
 
        // 输出结果
        foreach (var word in longWords)
        {
            Console.WriteLine(word);
        }
    }
}

同样,使用扩展方法语法:

var longWords = words.Where(word => word.Length > 3);

示例 3: 对列表进行排序和分组

假设有一个学生对象的列表,想要按年龄排序,并按班级分组。

csharp
using System;
using System.Collections.Generic;
using System.Linq;
 
class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Class { get; set; }
}
 
class Program
{
    static void Main()
    {
        List<Student> students = new List<Student>
        {
            new Student { Name = "Alice", Age = 20, Class = "A" },
            new Student { Name = "Bob", Age = 22, Class = "B" },
            new Student { Name = "Charlie", Age = 20, Class = "A" },
            new Student { Name = "David", Age = 23, Class = "B" }
        };
 
        // 按年龄排序
        var sortedStudents = from student in students
                             orderby student.Age
                             select student;
 
        // 按班级分组
        var groupedStudents = from student in sortedStudents
                              group student by student.Class into g
                              select new { Class = g.Key, Students = g.ToList() };
 
        // 输出结果
        foreach (var group in groupedStudents)
        {
            Console.WriteLine($"Class: {group.Class}");
            foreach (var student in group.Students)
            {
                Console.WriteLine($"  {student.Name}, Age: {student.Age}");
            }
        }
    }
}

使用扩展方法语法进行排序和分组可能稍微复杂一些,但也可以实现:

var sortedStudents = students.OrderBy(student => student.Age);
var groupedStudents = sortedStudents.GroupBy(student => student.Class)
                                    .Select(g => new { Class = g.Key, Students = g.ToList() });

示例 4: 使用LINQ to Objects进行复杂查询

假设想要找到年龄最大且班级为"A"的学生。

csharp
using System;
using System.Collections.Generic;
using System.Linq;
 
class Program
{
    static void Main()
    {
        List<Student> students = new List<Student>
        {
            // ... (同上)
        };
 
        // 找到年龄最大且班级为"A"的学生
        var student = (from student in students
                       where student.Class == "A"
                       orderby student.Age descending
                       select student).FirstOrDefault();
 
        if (student != null)
        {
            Console.WriteLine($"Oldest student in class A: {student.Name}, Age: {student.Age}");
        }
        else
        {
            Console.WriteLine("No student found in class A.");
        }
    }
}

使用扩展方法语法:

var student = students.Where(student => student.Class == "A")
                      .OrderByDescending(student => student.Age)
                      .FirstOrDefault();

这些示例展示了LINQ在C#中的一些基本用法,包括查询、排序、分组和复杂查询。
通过实践这些示例,可以更好地理解LINQ的工作原理,并逐步掌握其在数据处理中的应用。