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