编辑
2025-09-28
C#
00

目录

第一部分:LINQ基础
LINQ to Objects
查询表达式
延迟执行
LINQ查询操作符
过滤操作:where
选择操作:select
排序操作:orderby 和 orderby descending
分组操作:groupby
聚合操作:sum、average、min、max 等
总结

LINQ重中之重,LINQ(Language-Integrated Query)是C#中的一组技术,用于查询内存中的数据。LINQ to Objects是指使用LINQ查询.NET中的对象集合(如数组、列表等)。

第一部分:LINQ基础

LINQ是一种查询语法,它允许开发者以声明性的方式查询数据,无论这些数据是来自数据库、XML文档还是内存中的集合。

LINQ to Objects

LINQ to Objects指的是对内存中的对象集合(如数组、列表)进行查询。它允许我们使用强类型的方式来查询集合中的数据。

查询表达式

查询表达式是LINQ查询的一种语法,它看起来很像SQL语句。查询表达式通常由fromwhereselectorderby等子句组成。

延迟执行

LINQ查询具有延迟执行的特性,即查询表达式定义了一个查询计划,但直到你迭代访问结果时,查询才真正执行。

LINQ查询操作符

过滤操作:where

where子句用于过滤集合中的元素。

C#
namespace AppLinq { internal class Program { static void Main(string[] args) { var numbers = new[] { 1, 2, 3, 4, 5 }; // 从数组中选择偶数 var evenNumbers = from n in numbers where n % 2 == 0 select n; foreach (var n in evenNumbers) { Console.WriteLine(n); } Console.ReadKey(); } } }

image.png

选择操作:select

select子句用于选择集合中的元素或其属性。

C#
namespace AppLinq { internal class Program { public class Person { public string Name { get; set; } public int Age { get; set; } } static void Main(string[] args) { var people = new List<Person> { new Person { Name = "Rick", Age = 30 }, new Person { Name = "Tom", Age = 25 } }; var names = from p in people select p.Name; foreach (var name in names) { Console.WriteLine(name); } Console.ReadKey(); } } }

image.png

排序操作:orderbyorderby descending

orderbyorderby descending用于对集合元素进行排序。

C#
namespace AppLinq { internal class Program { public class Person { public string Name { get; set; } public int Age { get; set; } } static void Main(string[] args) { var people = new List<Person> { new Person { Name = "Rick", Age = 30 }, new Person { Name = "Tom", Age = 25 } }; var sortedPeople = from p in people orderby p.Age select p; foreach (var p in sortedPeople) { Console.WriteLine($"{p.Name} is {p.Age} years old."); } Console.ReadKey(); } } }

image.png

分组操作:groupby

groupby用于按照某个键将元素分组。

C#
namespace AppLinq { internal class Program { public class Person { public string Name { get; set; } public int Age { get; set; } } static void Main(string[] args) { var people = new List<Person> { new Person { Name = "Rick", Age = 30 }, new Person { Name = "Tom", Age = 25 }, new Person { Name = "Jerry", Age = 30 }, new Person { Name = "Mary", Age = 35 }, new Person { Name = "Bob", Age = 30 }, }; var groupedByAge = from p in people group p by p.Age into ageGroup select ageGroup; foreach (var group in groupedByAge) { Console.WriteLine($"Age group: {group.Key}"); foreach (var p in group) { Console.WriteLine($" - {p.Name}"); } } Console.ReadKey(); } } }

image.png

聚合操作:sumaverageminmax

聚合操作用于对集合中的元素执行聚合计算。

C#
namespace AppLinq { internal class Program { public class Person { public string Name { get; set; } public int Age { get; set; } } static void Main(string[] args) { var people = new List<Person> { new Person { Name = "Rick", Age = 30 }, new Person { Name = "Tom", Age = 25 }, new Person { Name = "Jerry", Age = 30 }, new Person { Name = "Mary", Age = 35 }, new Person { Name = "Bob", Age = 30 }, }; var totalAge = people.Sum(p => p.Age); Console.WriteLine($"Total age: {totalAge}"); var averageAge = people.Average(p => p.Age); Console.WriteLine($"Average age: {averageAge}"); Console.ReadKey(); } } }

image.png

总结

LINQ to Objects是C#中一个强大的特性,它提供了一种简洁、声明性的方式来查询和操作内存中的数据集合。通过本课程的学习,你应该能够理解LINQ的基本概念,并能够在实际开发中应用LINQ to Objects来简化数据处理任务。练习和探索更多的LINQ操作符将帮助你更深入地掌握这个强大的工具。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!