Jupyter AI

8 C# LINQ与Lambda表达式之LINQ方法语法

📅 发表日期: 2024年8月13日

分类: 🔷C# 高级

👁️阅读: --

在上一篇中,我们探讨了LINQ查询语法,它是一种以SQL风格书写,易于理解且语法清晰的查询方式。然而,在实际开发中,我们常常会用到LINQ方法语法,这种语法适用于各种集合(如列表、数组等)上的操作,并且在某些场合下,可能会显得更加灵活和强大。接下来,我们将深入探讨LINQ方法语法的用法,并通过一些案例来演示其特点。

LINQ方法语法概述

LINQ方法语法主要依赖于.NET中集合类型的方法。通过链式调用,可以实现对集合的各种操作。常用的LINQ方法包括:

  • Select: 用于投影选择
  • Where: 用于过滤
  • OrderByOrderByDescending: 用于排序
  • GroupBy: 用于分组
  • Join: 用于连接多个集合
  • AnyAll: 用于检查条件是否成立

使用LINQ方法语法时,我们通常需要使用using System.Linq;指令来引入所需的命名空间。

案例一:使用WhereSelect方法

考虑以下数据模型:

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}

现在,我们有一个学生列表,我们希望筛选出所有年龄大于18岁的学生,并只获取他们的名字。使用LINQ方法语法,我们可以这样写:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        List<Student> students = new List<Student>
        {
            new Student { Name = "Alice", Age = 20 },
            new Student { Name = "Bob", Age = 17 },
            new Student { Name = "Charlie", Age = 19 },
        };

        // 使用LINQ方法语法筛选和选择
        var adultNames = students
            .Where(s => s.Age > 18)  // 筛选年龄大于18的学生
            .Select(s => s.Name);    // 选择他们的名字

        foreach (var name in adultNames)
        {
            Console.WriteLine(name);
        }
    }
}

在这个案例中,我们使用了Where方法来过滤出年龄大于18岁的学生,然后用Select方法来选择他们的名字。这个过程是通过链式调用实现的,代码可读性较高。

案例二:使用OrderByGroupBy方法

在另一个例子中,我们想对学生按照年龄进行排序,并根据年龄分组。我们可以使用OrderByGroupBy方法来实现:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        List<Student> students = new List<Student>
        {
            new Student { Name = "Alice", Age = 20 },
            new Student { Name = "Bob", Age = 19 },
            new Student { Name = "Charlie", Age = 20 },
            new Student { Name = "Diana", Age = 18 },
        };

        // 排序并分组
        var groupedStudents = students
            .OrderBy(s => s.Age)          // 按年龄升序排序
            .GroupBy(s => s.Age);         // 按年龄分组

        foreach (var group in groupedStudents)
        {
            Console.WriteLine($"Age: {group.Key}");
            foreach (var student in group)
            {
                Console.WriteLine($" - {student.Name}");
            }
        }
    }
}

在这个例子中,OrderBy方法首先对学生列表中的学生按年龄进行排序,接着,GroupBy方法根据年龄将其分组。这里的group.Key代表组的键值(即年龄),而内部的循环则遍历每个组中的学生。

总结

LINQ方法语法提供了一种灵活且强大的方式来操作集合,与查询语法相比,更加注重方法的组合与链式调用。在本篇中,我们学习了如何使用WhereSelectOrderByGroupBy等方法对集合进行筛选、转化以及分组。这些方法不仅提高了代码的可读性,也使得操作变得更加直观。接下来,我们将继续深入探讨LINQ与集合的组合使用,敬请期待!