下面是一个使用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()`会返回这些学生中的任意一个。如果需要更复杂的逻辑来处理这种情况(比如选择年龄最小的那个),则需要进行额外的处理。