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

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

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

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

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

csharp 复制代码
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);
        }
    }
}

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

csharp 复制代码
var evenNumbers = numbers.Where(number => number % 2 == 0);

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

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

csharp 复制代码
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);
        }
    }
}

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

csharp 复制代码
var longWords = words.Where(word => word.Length > 3);

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

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

csharp 复制代码
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}");
            }
        }
    }
}

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

csharp 复制代码
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 复制代码
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.");
        }
    }
}

使用扩展方法语法:

csharp 复制代码
var student = students.Where(student => student.Class == "A")
                      .OrderByDescending(student => student.Age)
                      .FirstOrDefault();

这些示例展示了LINQ在C#中的一些基本用法,包括查询、排序、分组和复杂查询。

通过实践这些示例,可以更好地理解LINQ的工作原理,并逐步掌握其在数据处理中的应用。

相关推荐
鲸屿1957 分钟前
python之socket网络编程
开发语言·网络·python
没有梦想的咸鱼185-1037-166333 分钟前
基于R语言机器学习方法在生态经济学领域中的实践技术应用
开发语言·机器学习·数据分析·r语言
@小红花1 小时前
从0到1学习Vue框架Day03
前端·javascript·vue.js·学习·ecmascript
向上的车轮1 小时前
基于go语言的云原生TodoList Demo 项目,验证云原生核心特性
开发语言·云原生·golang
The Chosen One9851 小时前
C++ : AVL树-详解
开发语言·c++
mysla1 小时前
嵌入式学习day45-硬件—汇编
汇编·学习
PH_modest1 小时前
【Qt跬步积累】—— 初识Qt
开发语言·qt
时光追逐者1 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 53 期(2025年9.1-9.7)
c#·.net·.netcore
冷冷的菜哥1 小时前
ASP.NET Core使用MailKit发送邮件
后端·c#·asp.net·发送邮件·mailkit
永日456702 小时前
学习日记-HTML-day51-9.9
前端·学习·html