C# | Linq基本功 —— 必学的必熟的10个方法

简介: Linq(Language Integrated Query)是C#语言中的一种查询语言,它提供了一种统一的方式来查询和操作各种数据源,如集合、数据库、XML等。Linq的出现使得开发者能够以一种更简洁、更直观的方式来处理数据,提高了代码的可读性和可维护性。

image.png

C# Linq基本功 —— 必学的必熟的10个方法

@[toc]

1. Linq简介

1.1 什么是Linq

Linq(Language Integrated Query)是C#语言中的一种查询语言,它提供了一种统一的方式来查询和操作各种数据源,如集合、数据库、XML等。Linq的出现使得开发者能够以一种更简洁、更直观的方式来处理数据,提高了代码的可读性和可维护性。

1.2 Linq的优势

Linq具有以下几个优势:

  • 简洁:语法类似于SQL的查询语句,使代码简洁易懂。
  • 强类型:编译时编译器会进行类型检查,降低运行时错误。
  • 可组合:查询操作之间是可以进行组合的(比如在一个查询中嵌套另一个查询),非常灵活。
  • 可扩展:Linq提供了一套标准的查询操作符,同时也支持自定义扩展方法,可以根据需要进行扩展。

2. Linq基本方法

2.1 Where方法

Where方法用于根据指定的条件筛选出符合条件的元素。例如,我们可以使用Where方法从一个整数集合中筛选出所有大于10的元素。

var numbers = new List<int> {
   
    5, 10, 15, 20, 25 };
var result = numbers.Where(n => n > 10);

执行结果:

15, 20, 25

2.2 Select方法

Select方法用于对集合中的每个元素进行转换。例如,我们可以使用Select方法将一个整数集合中的每个元素乘以2。

var numbers = new List<int> {
   
    1, 2, 3, 4, 5 };
var result = numbers.Select(n => n * 2);

执行结果:

2, 4, 6, 8, 10

2.3 OrderBy方法

OrderBy方法用于对集合中的元素进行排序。例如,我们可以使用OrderBy方法对一个字符串集合按照字母顺序进行排序。

var names = new List<string> {
   
    "Tom", "Jerry", "Alice", "Bob" };
var result = names.OrderBy(n => n);

执行结果:

Alice, Bob, Jerry, Tom

2.4 GroupBy方法

GroupBy方法用于根据指定的键对集合中的元素进行分组。例如,我们可以使用GroupBy方法将一个学生集合按照班级进行分组。

var students = new List<Student>
{
   
   
    new Student {
   
    Name = "Tom", Class = "A" },
    new Student {
   
    Name = "Jerry", Class = "B" },
    new Student {
   
    Name = "Alice", Class = "A" },
    new Student {
   
    Name = "Bob", Class = "B" }
};
var result = students.GroupBy(s => s.Class);

执行结果:

A: Tom, Alice
B: Jerry, Bob

2.5 Join方法

Join方法用于将两个集合中的元素进行关联。例如,我们可以使用Join方法将一个学生集合和一个班级集合关联起来。

var students = new List<Student>
{
   
   
    new Student {
   
    Name = "Tom", ClassId = 1 },
    new Student {
   
    Name = "Jerry", ClassId = 2 },
    new Student {
   
    Name = "Alice", ClassId = 1 },
    new Student {
   
    Name = "Bob", ClassId = 2 }
};
var classes = new List<Class>
{
   
   
    new Class {
   
    Id = 1, Name = "A" },
    new Class {
   
    Id = 2, Name = "B" }
};
var result = students.Join(classes, s => s.ClassId, c => c.Id, (s, c) => new {
   
    s.Name, c.Name });

执行结果:

{ Name = "Tom", Name = "A" },
{ Name = "Jerry", Name = "B" },
{ Name = "Alice", Name = "A" },
{ Name = "Bob", Name = "B" }

2.6 Any方法

Any方法用于判断集合中是否存在满足指定条件的元素。例如,我们可以使用Any方法判断一个整数集合中是否存在大于10的元素。

var numbers = new List<int> {
   
    5, 10, 15, 20, 25 };
var result = numbers.Any(n => n > 10);

执行结果:

True

2.7 All方法

All方法用于判断集合中的所有元素是否都满足指定条件。例如,我们可以使用All方法判断一个整数集合中的所有元素是否都大于10。

var numbers = new List<int> {
   
    15, 20, 25 };
var result = numbers.All(n => n > 10);

执行结果:

True

2.8 First方法

First方法用于返回集合中满足指定条件的第一个元素。例如,我们可以使用First方法返回一个整数集合中大于10的第一个元素。

var numbers = new List<int> {
   
    5, 10, 15, 20, 25 };
var result = numbers.First(n => n > 10);

执行结果:

15

2.9 Skip方法

Skip方法用于跳过集合中指定数量的元素。例如,我们可以使用Skip方法跳过一个整数集合中的前两个元素。

var numbers = new List<int> {
   
    1, 2, 3, 4, 5 };
var result = numbers.Skip(2);

执行结果:

3, 4, 5

2.10 Take方法

Take方法用于从集合中取出指定数量的元素。例如,我们可以使用Take方法从一个整数集合中取出前三个元素。

var numbers = new List<int> {
   
    1, 2, 3, 4, 5 };
var result = numbers.Take(3);

执行结果:

1, 2, 3

结语

本文介绍了C# Linq中一些作为基本的扩展方法的使用。掌握这些方法可以帮助开发者更加高效地处理数据。不夸张的说作为一个.NET工程师,不熟练掌握Linq的使用便是不合格。

参考文献:

相关文章
|
2月前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
2月前
|
安全 C# 开发者
C#中的默认接口方法:接口演化的新篇章
【1月更文挑战第11天】本文探讨了C# 8.0中引入的默认接口方法,这一特性允许在接口中定义具有默认实现的方法。文章介绍了默认接口方法的语法、使用场景,以及它们如何影响接口的设计和实现,同时讨论了默认接口方法带来的好处和潜在的陷阱。
|
2月前
|
SQL 开发框架 .NET
C#进阶-LINQ实现对集合的增删改查
本篇演示了LINQ在日常开发中的常用操作,实现结果集的增删改查。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
25 0
|
3月前
|
缓存 C#
C# 操作路径(Path)类方法的使用与解析运行实例
C# 操作路径(Path)类方法的使用与解析运行实例
|
2月前
|
存储 C#
C# 方法详解:定义、调用、参数、默认值、返回值、命名参数、方法重载全解析
方法是一段代码,只有在调用时才会运行。 您可以将数据(称为参数)传递给方法。 方法用于执行某些操作,也被称为函数。 为什么使用方法?为了重用代码:定义一次代码,然后多次使用。
30 1
|
11天前
|
SQL 开发框架 .NET
C# Linq SaveChanges()报错 You have an error in your SQL syntex
C# Linq SaveChanges()报错 You have an error in your SQL syntex
5 0
|
2月前
|
C# Python
C# 笔记3 - 重载一系列像python那样的print()方法
C# 笔记3 - 重载一系列像python那样的print()方法
14 1
|
2月前
|
存储 C# 索引
C# 字符串操作指南:长度、连接、插值、特殊字符和实用方法
字符串用于存储文本。一个字符串变量包含由双引号括起的字符集合
47 2
|
2月前
|
SQL 开发框架 .NET
C#进阶-LINQ表达式之投影
本篇文章我们将演示LINQ扩展包语法里的投影特性,用投影实现LINQ结果集的类型转换。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
19 0
|
2月前
|
SQL 开发框架 .NET
C#进阶-LINQ表达式之多表查询Ⅱ
本篇文章我们将演示LINQ扩展包基础语法里的多表查询 ,以Join连接查询为主要内容。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
23 0

热门文章

最新文章

相关产品

  • 云迁移中心