linq 查询 Linq 高级查询实例代码


下面是一个使用LINQ进行高级查询的示例代码,这个例子演示了如何对一个列表(List)进行筛选(Where)、排序(OrderBy)、分组(GroupBy)以及选择(Select)等操作。假设我们有一个学生(Student)列表,其中包含学生的姓名(Name)、年龄(Age)和分数(Score)等信息。

首先,定义学生类(Student):


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

然后,是LINQ查询的示例代码:


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

class Program
{
    static void Main()
    {
        // 初始化学生列表
        List<Student> students = new List<Student>
        {
            new Student { Name = "Alice", Age = 20, Score = 90 },
            new Student { Name = "Bob", Age = 22, Score = 85 },
            new Student { Name = "Charlie", Age = 21, Score = 95 },
            new Student { Name = "David", Age = 20, Score = 80 },
            // 添加更多学生...
        };

        // 高级LINQ查询示例
        // 筛选年龄大于20岁的学生,按分数降序排序,然后按年龄分组,最后选择每组中分数最高的学生
        var query = students
            .Where(s => s.Age > 20) // 筛选年龄大于20的学生
            .OrderByDescending(s => s.Score) // 按分数降序排序
            .GroupBy(s => s.Age) // 按年龄分组
            .Select(group => group.First()); // 选择每组中第一个元素(因为已经按分数排序,所以第一个即为分数最高的)

        // 输出结果
        foreach (var student in query)
        {
            Console.WriteLine($"Name: {student.Name}, Age: {student.Age}, Score: {student.Score}");
        }
    }
}

注意:在这个例子中,`Select(group => group.First())`选择了每个组中的第一个元素作为分数最高的学生。这是基于前面已经通过`OrderByDescending`对列表进行了降序排序的假设。如果有多名学生的分数相同且都是该组中最高的,则`First()`会返回这些学生中的任意一个。如果需要更复杂的逻辑来处理这种情况(比如选择年龄最小的那个),则需要进行额外的处理。