LINQ基础 #
一、LINQ概述 #
1.1 什么是LINQ #
LINQ(Language Integrated Query)是C#中集成的查询语言。
1.2 LINQ特点 #
- 统一的查询语法
- 类型安全
- 智能提示
- 支持多种数据源
1.3 LINQ提供器 #
| 提供器 | 说明 |
|---|---|
| LINQ to Objects | 内存集合 |
| LINQ to Entities | Entity Framework |
| LINQ to XML | XML文档 |
| LINQ to JSON | JSON数据 |
二、查询语法 #
2.1 基本语法 #
csharp
var numbers = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evens = from n in numbers
where n % 2 == 0
select n;
var squares = from n in numbers
select n * n;
2.2 排序 #
csharp
var numbers = new[] { 5, 2, 8, 1, 9, 3 };
var sorted = from n in numbers
orderby n
select n;
var descending = from n in numbers
orderby n descending
select n;
var people = new[] { new { Name = "张三", Age = 25 }, new { Name = "李四", Age = 20 } };
var sortedPeople = from p in people
orderby p.Age, p.Name
select p;
2.3 分组 #
csharp
var numbers = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var groups = from n in numbers
group n by n % 2 into g
select new { Remainder = g.Key, Numbers = g };
var people = new[] { new { Name = "张三", Age = 25 }, new { Name = "李四", Age = 25 }, new { Name = "王五", Age = 30 } };
var byAge = from p in people
group p by p.Age into g
select new { Age = g.Key, Count = g.Count(), People = g };
2.4 连接 #
csharp
var customers = new[] { new { Id = 1, Name = "张三" }, new { Id = 2, Name = "李四" } };
var orders = new[] { new { CustomerId = 1, Product = "笔记本" }, new { CustomerId = 1, Product = "鼠标" } };
var query = from c in customers
join o in orders on c.Id equals o.CustomerId
select new { c.Name, o.Product };
三、方法语法 #
3.1 Where #
csharp
var numbers = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evens = numbers.Where(n => n % 2 == 0);
var greaterThan5 = numbers.Where(n => n > 5);
3.2 Select #
csharp
var numbers = new[] { 1, 2, 3, 4, 5 };
var squares = numbers.Select(n => n * n);
var strings = numbers.Select(n => n.ToString());
var indexed = numbers.Select((n, i) => new { Index = i, Value = n });
3.3 OrderBy #
csharp
var numbers = new[] { 5, 2, 8, 1, 9, 3 };
var sorted = numbers.OrderBy(n => n);
var descending = numbers.OrderByDescending(n => n);
var thenBy = numbers.OrderBy(n => n % 2).ThenBy(n => n);
3.4 GroupBy #
csharp
var numbers = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var groups = numbers.GroupBy(n => n % 2);
var byLength = numbers.GroupBy(n => n.ToString().Length);
3.5 Join #
csharp
var customers = new[] { new { Id = 1, Name = "张三" }, new { Id = 2, Name = "李四" } };
var orders = new[] { new { CustomerId = 1, Product = "笔记本" } };
var result = customers.Join(orders, c => c.Id, o => o.CustomerId, (c, o) => new { c.Name, o.Product });
四、聚合操作 #
4.1 Count和Sum #
csharp
var numbers = new[] { 1, 2, 3, 4, 5 };
int count = numbers.Count();
int evenCount = numbers.Count(n => n % 2 == 0);
int sum = numbers.Sum();
4.2 Average和Min/Max #
csharp
var numbers = new[] { 1, 2, 3, 4, 5 };
double average = numbers.Average();
int min = numbers.Min();
int max = numbers.Max();
4.3 Aggregate #
csharp
var numbers = new[] { 1, 2, 3, 4, 5 };
int product = numbers.Aggregate((a, b) => a * b);
string result = numbers.Aggregate("", (s, n) => s + n + ",");
五、元素操作 #
5.1 First和Last #
csharp
var numbers = new[] { 1, 2, 3, 4, 5 };
int first = numbers.First();
int firstEven = numbers.First(n => n % 2 == 0);
int last = numbers.Last();
int lastEven = numbers.Last(n => n % 2 == 0);
5.2 FirstOrDefault #
csharp
var numbers = new[] { 1, 2, 3, 4, 5 };
int first = numbers.FirstOrDefault();
int firstGreater10 = numbers.FirstOrDefault(n => n > 10);
int defaultIfEmpty = numbers.DefaultIfEmpty(0).First();
5.3 ElementAt #
csharp
var numbers = new[] { 1, 2, 3, 4, 5 };
int second = numbers.ElementAt(1);
int secondOrDefault = numbers.ElementAtOrDefault(10);
六、量词操作 #
6.1 Any和All #
csharp
var numbers = new[] { 1, 2, 3, 4, 5 };
bool hasEven = numbers.Any(n => n % 2 == 0);
bool allPositive = numbers.All(n => n > 0);
6.2 Contains #
csharp
var numbers = new[] { 1, 2, 3, 4, 5 };
bool contains3 = numbers.Contains(3);
七、分区操作 #
7.1 Take和Skip #
csharp
var numbers = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var first3 = numbers.Take(3);
var skip3 = numbers.Skip(3);
var page = numbers.Skip(10).Take(10);
7.2 TakeWhile和SkipWhile #
csharp
var numbers = new[] { 1, 2, 3, 4, 5, 1, 2 };
var takeWhile = numbers.TakeWhile(n => n < 4);
var skipWhile = numbers.SkipWhile(n => n < 4);
八、总结 #
LINQ基础要点:
| 操作 | 查询语法 | 方法语法 |
|---|---|---|
| 过滤 | where | Where |
| 投影 | select | Select |
| 排序 | orderby | OrderBy |
| 分组 | group by | GroupBy |
| 连接 | join | Join |
下一步,让我们学习LINQ操作符!
最后更新:2026-03-26