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