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

相关推荐
lkbhua莱克瓦249 小时前
集合进阶8——Stream流
java·开发语言·笔记·github·stream流·学习方法·集合
车载测试工程师9 小时前
CAPL学习-IP API函数-1
网络·学习·tcp/ip·capl·canoe·doip
20岁30年经验的码农9 小时前
Java Elasticsearch 实战指南
java·开发语言·elasticsearch
雾岛听蓝9 小时前
C++ 类和对象(一):从概念到实践,吃透类的核心基础
开发语言·c++·经验分享·笔记
CoderYanger9 小时前
优选算法-优先级队列(堆):75.数据流中的第K大元素
java·开发语言·算法·leetcode·职场和发展·1024程序员节
TracyCoder1239 小时前
MySQL 实战宝典(八):Java后端MySQL分库分表工具解析与选型秘籍
java·开发语言·mysql
非凡的世界9 小时前
为什么我和越来越多的PHP程序员,选择了 Webman ?
开发语言·php·workman·webman
MarkHD10 小时前
车辆TBOX科普 第45次
java·开发语言
烛阴10 小时前
从`new()`到`.DoSomething()`:一篇讲透C#方法与构造函数的终极指南
前端·c#
还债大湿兄10 小时前
阿里通义千问调用图像大模型生成轮动漫风格 python调用
开发语言·前端·python