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

news/2025/2/23 14:00:53

学习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的工作原理,并逐步掌握其在数据处理中的应用。


http://www.niftyadmin.cn/n/5863456.html

相关文章

VIM FZF 安裝和使用

在 Vim 中安装和使用 fzf 进行文件、函数、变量、宏定义的模糊匹配 以下是详细步骤&#xff1a; 1. 安装 fzf 和 fzf.vim 插件 1.1 安装 fzf 工具 fzf 是一个命令行模糊查找工具&#xff0c;必须先安装它。根据你的操作系统选择安装方式&#xff1a; macOS: brew install fz…

2502C++,C++继承的多态性

构 A{单 向量<串>记;元<类 T>静 空 ff(串&a){清理(记);名向量(a,记);串 b{"---ff---"};打印(b);T::g();} };构 B:公 A{元<类 T>静 空 f(){串 a{"错误.txt"};ff<T>(a);} };构 C:公 A{元<类 T>静 空 f(){串 a{"a12.c…

极简入门,本地部署dify低代码平台构建AI Agent大模型全流程(使用教程、微案例、配置详解、架构图解析)

文章目录 一、环境搭建1.1 安装VMware-workstationCentOS7.91.2 安装宝塔1.3 安装docker及改镜像、安装dify1.4 配置模型供应商 二、dify快速上手体验2.1 知识库2.2 微案例&#xff1a;基于知识库的助手 三、dify知识库配置详解3.1 分片策略3.2 父子分段3.3 索引方法3.4 检索结…

std::lock_guard、std::unique_lock、std::shared_lock

在C中&#xff0c;std::lock_guard、std::unique_lock和std::shared_lock是用于管理互斥量的RAII类&#xff0c;确保锁的正确获取和释放&#xff08;避免忘记释放锁导致的死锁问题&#xff09;。以下是它们的详细介绍、区别及使用场景&#xff1a; 1. std::lock_guard 功能&am…

LeetCode 2506.统计相似字符串对的数目:哈希表+位运算

【LetMeFly】2506.统计相似字符串对的数目&#xff1a;哈希表位运算 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-pairs-of-similar-strings/ 给你一个下标从 0 开始的字符串数组 words 。 如果两个字符串由相同的字符组成&#xff0c;则认为这两个字符串 …

【多模态处理篇三】【DeepSeek语音合成:TTS音色克隆技术揭秘】

最近帮某明星工作室做AI语音助手时遇到魔幻需求——要求用5秒的咳嗽声克隆出完整音色!传统TTS系统直接翻车,生成的语音像得了重感冒的电音怪物。直到祭出DeepSeek的TTS音色克隆黑科技,才让AI语音从"机器朗读"进化到"声临其境"。今天我们就来扒开这个声音…

【Leetcode 每日一题 - 扩展】1512. 好数对的数目

问题背景 给你一个整数数组 n u m s nums nums。 如果一组数字 ( i , j ) (i,j) (i,j) 满足 n u m s [ i ] n u m s [ j ] nums[i] nums[j] nums[i]nums[j] 且 i < j i < j i<j&#xff0c;就可以认为这是一组 好数对 。 返回好数对的数目。 数据约束 1 ≤ n …

vivado修改下载器下载速率

Error Launching Program X Error while launching program: fpga configuration failed. DONE PIN is not HIGH 原因是下载器速度太快了。先从任务管理器中关闭hw_server.exe试一下,要是不行就按下面三种方法解决。 第一种方法可以不用修改下载速度,直接先从vivado中将bit流…