欢迎来到石家庄建站小程序开发公司

asp.net

LINQ基础入门

作者: 发布时间:2026-01-25 点击:

LINQ(Language Integrated Query,语言集成查询)是 C# 中用于查询集合数据的强大工具,它可以用类似 SQL 的语法操作各种数据(数组、列表、数据库等)。学习 LINQ 可以按 “基础查询→常用操作→实战练习” 的步骤逐步掌握:


第一步:理解为什么需要 LINQ

没有 LINQ 时,操作集合需要写大量循环和判断,代码冗长且可读性差。例如,从列表中筛选出年龄大于 18 的人:


// 传统方式:筛选列表

List<Person> adults = new List<Person>();

foreach (var person in people)

{

    if (person.Age > 18)

    {

        adults.Add(person);

    }

}


用 LINQ 实现,代码更简洁直观:

// LINQ方式:一行代码完成筛选

var adults = people.Where(p => p.Age > 18).ToList();


LINQ 的核心优势:简化集合操作代码,提高可读性,支持多种数据源(内存集合、数据库、XML 等)。


第二步:准备工作(引入命名空间和测试数据)

使用 LINQ 需要引入命名空间:

using System.Linq;


// 测试类:表示一个人

public class Person

{

    public string Name { get; set; }

    public int Age { get; set; }

    public string City { get; set; }

}

 

// 测试数据:人员列表

List<Person> people = new List<Person>

{

    new Person { Name = "张三", Age = 22, City = "北京" },

    new Person { Name = "李四", Age = 17, City = "上海" },

    new Person { Name = "王五", Age = 25, City = "北京" },

    new Person { Name = "赵六", Age = 30, City = "广州" }

};


第三步:学习 LINQ 的两种语法

LINQ 有两种写法,功能完全相同,可根据习惯选择:


1. 方法语法(推荐)

通过扩展方法调用(如Where、Select),更适合链式操作:

// 筛选年龄>18的人

var result = people.Where(p => p.Age > 18);


2. 查询语法(类似 SQL)

用from...where...select等关键字,结构更接近 SQL:

// 同样筛选年龄>18的人(与上面方法语法效果相同)

var result = from p in people

             where p.Age > 18

             select p;



注意:查询语法最终会被编译为方法语法,两者可以混合使用。


第四步:掌握最常用的 LINQ 操作

从基础操作开始,逐步积累:


1. 筛选(Where)

作用:按条件筛选集合中的元素(类似 SQL 的WHERE)。


// 筛选年龄>18且来自北京的人

var beijingAdults = people

    .Where(p => p.Age > 18 && p.City == "北京")

    .ToList(); // 转换为List(默认返回IEnumerable,延迟执行)

 

// 结果:张三(22,北京)、王五(25,北京)


2. 投影(Select)

作用:提取元素的部分属性,或转换为新的类型(类似 SQL 的SELECT)。


// 只提取姓名和年龄,转换为匿名对象

var nameAndAge = people

    .Select(p => new { p.Name, p.Age }) // 匿名类型:只包含Name和Age

    .ToList();

 

// 结果:{ Name="张三", Age=22 }, { Name="李四", Age=17 }, ...


3. 排序(OrderBy/ThenBy)

作用:按指定属性排序(OrderBy升序,OrderByDescending降序,ThenBy次要排序)。


// 先按年龄升序,年龄相同再按姓名降序

var sortedPeople = people

    .OrderBy(p => p.Age) // 主排序:年龄从小到大

    .ThenByDescending(p => p.Name) // 次要排序:姓名从Z到A

    .ToList();

 

// 结果顺序:李四(17)→ 张三(22)→ 王五(25)→ 赵六(30)


4. 聚合(Count/Sum/Average 等)

作用:对集合进行统计计算。


// 统计总人数

int total = people.Count(); 

 

// 统计北京的人数

int beijingCount = people.Count(p => p.City == "北京"); // 结果:2

 

// 计算平均年龄

double avgAge = people.Average(p => p.Age); // 结果:(22+17+25+30)/4 = 23.5

 

// 计算年龄总和

int totalAge = people.Sum(p => p.Age); // 结果:94


5. 分组(GroupBy)

作用:按指定属性分组(类似 SQL 的GROUP BY)。


// 按城市分组,统计每个城市的人数

var groupByCity = people

    .GroupBy(p => p.City) // 按City分组

    .Select(g => new 

    { 

        City = g.Key, // 分组的键(城市名)

        Count = g.Count() // 每组的人数

    })

    .ToList();

 

// 结果:

// { City="北京", Count=2 }, { City="上海", Count=1 }, { City="广州", Count=1 }


6. 取前 N 条(Take)和跳过 N 条(Skip)

作用:分页查询常用。


// 取年龄最大的2个人

var top2Ages = people

    .OrderByDescending(p => p.Age)

    .Take(2) // 取前2条

    .ToList(); // 结果:赵六(30)、王五(25)

 

// 跳过前2条,取剩下的

var skip2 = people

    .OrderBy(p => p.Age)

    .Skip(2) // 跳过前2条

    .ToList(); // 结果:王五(25)、赵六(30)


第五步:理解 LINQ 的 “延迟执行”

LINQ 查询默认是延迟执行的:定义查询时不会立即执行,直到真正需要结果时(如ToList()、Count()、foreach遍历)才会执行。


// 1. 定义查询(此时未执行)

var query = people.Where(p => p.Age > 18);

 

// 2. 修改数据源(添加一个新的成年人)

people.Add(new Person { Name = "孙七", Age = 20, City = "北京" });

 

// 3. 执行查询(此时会包含新增的孙七)

var result = query.ToList(); // 结果包含:张三、王五、孙七


立即执行的方法:ToList()、ToArray()、Count()、First()等,会强制查询立即执行并返回结果。


第六步:实战练习(综合案例)

需求:从人员列表中查询 “年龄在 20-30 岁之间,来自北京或上海” 的人,按年龄升序排序,只显示姓名和城市,并统计符合条件的人数。


// 综合查询

var query = people

    .Where(p => p.Age >= 20 && p.Age <= 30 

             && (p.City == "北京" || p.City == "上海"))

    .OrderBy(p => p.Age)

    .Select(p => new { p.Name, p.City });

 

// 执行查询并获取结果

var result = query.ToList();

int count = result.Count;

 

// 输出

Console.WriteLine($"符合条件的人数:{count}");

foreach (var item in result)

{

    Console.WriteLine($"姓名:{item.Name},城市:{item.City}");

}


输出结果:

符合条件的人数:2

姓名:张三,城市:北京

姓名:王五,城市:北京


总结:LINQ 学习路径

1、基础操作:先掌握Where(筛选)、Select(投影)、OrderBy(排序)。

2、统计与分组:学习Count、Average、GroupBy。

3、进阶操作:掌握Take/Skip(分页)、Join(关联查询)等。

4、理解执行机制:区分延迟执行和立即执行,避免数据源修改导致的意外。





新闻资讯
相关案例