C#:了解LINQ,简化数据查询和操作的强大工具(上)

简介: C#:了解LINQ,简化数据查询和操作的强大工具

linq关键字


以下是 LINQ(Language Integrated Query)中常见的关键字及其作用,并给出一个示例以展示其执行结果:


from

  1. from:用于指定数据源,可以是集合、数组、数据库表等。
    示例:
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var result = from num in numbers
             select num * 2;
// 执行结果:result = { 2, 4, 6, 8, 10 }


where

  1. where:用于筛选满足指定条件的元素。
    示例:
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var result = from num in numbers
             where num % 2 == 0
             select num;
// 执行结果:result = { 2, 4 }


select

  1. select:用于选择返回的结果集。
    示例:
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var result = from num in numbers
             select $"Number: {num}";
// 执行结果:result = { "Number: 1", "Number: 2", "Number: 3", "Number: 4", "Number: 5" }


orderby

  1. orderby:用于对结果集按指定的属性进行排序。
    示例:
var numbers = new List<int> { 3, 1, 4, 2, 5 };
var result = from num in numbers
             orderby num descending
             select num;
// 执行结果:result = { 5, 4, 3, 2, 1 }


join

  1. join:用于在两个数据源之间执行联接操作。
    示例:
var students = new List<Student>
{
    new Student { Id = 1, Name = "Alice" },
    new Student { Id = 2, Name = "Bob" }
};
var scores = new List<Score>
{
    new Score { StudentId = 1, Value = 90 },
    new Score { StudentId = 2, Value = 85 }
};
var result = from student in students
             join score in scores on student.Id equals score.StudentId
             select new { student.Name, score.Value };
// 执行结果:result = { { "Alice", 90 }, { "Bob", 85 } }


group

  1. group:用于按指定的键对结果集进行分组。
    示例:
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var result = from num in numbers
             group num by num % 2 into grouped
             select new { Key = grouped.Key, Numbers = grouped.ToList() };
// 执行结果:result = { { Key = 0, Numbers = { 2, 4 } }, { Key = 1, Numbers = { 1, 3, 5 } } }


let

  1. let:用于在查询过程中定义中间变量。
    示例:
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var result = from num in numbers
             let squared = num * num
             select squared;
// 执行结果:result = { 1, 4, 9, 16, 25 }


into

  1. into:用于将查询结果存储到临时结果集中,以供后续查询操作使用。
    示例:
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var result = from num in numbers
             where num > 2
             select num
             into filtered
             where filtered < 5
             select filtered;
// 执行结果:result = { 3, 4 }


这些关键字是构建 LINQ 查询和操作表达式的重要组成部分。每个关键字都有其特定的用途,可用于执行不同的查询操作。通过组合和嵌套使用这些关键字,可以以声明性的方式构建复杂的查询逻辑。上述示例仅展示了每个关键字的一种常见用法,实际使用时可以根据需求进行灵活组合和定制。


linq方法


在 LINQ(Language Integrated Query)中,提供了许多方法用于查询和操作数据。这些方法可用于对各种数据源(如集合、数组、数据库表等)执行查询、筛选、排序、投影、分组、聚合等操作。以下是一些常见的 LINQ 方法:


筛选方法

Where

  • Where: 根据指定条件筛选元素。

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var result = numbers.Where(num => num % 2 == 0);
// 执行结果:result = { 2, 4 }


OfType

  • OfType: 筛选指定类型的元素。
var mixedList = new List<object>
{
    1, "Alice", 2, "Bob", 3, "Charlie"
};
var numbers = mixedList.OfType<int>();
// 执行结果:numbers = { 1, 2, 3 }
var names = mixedList.OfType<string>();
// 执行结果:names = { "Alice", "Bob", "Charlie" }

排序方法:


OrderBy

  • OrderBy: 根据指定的键进行升序排序。


OrderByDescending


OrderByDescending: 根据指定的键进行降序排序。

var numbers = new List<int> { 3, 1, 4, 2, 5 };
var ascendingOrder = numbers.OrderBy(num => num);
// 执行结果:ascendingOrder = { 1, 2, 3, 4, 5 }
var descendingOrder = numbers.OrderByDescending(num => num);
// 执行结果:descendingOrder = { 5, 4, 3, 2, 1 }


ThenBy

  • ThenBy: 在已排序的结果集上根据额外的键进行升序排序。

ThenBy 方法用于在已经进行排序的结果集上根据额外的键进行升序排序。它通常与 OrderBy 或 OrderByDescending 方法一起使用。以下是 ThenBy 方法的使用示例:

var students = new List<Student>
{
    new Student { Name = "Alice", Grade = "A", Age = 20 },
    new Student { Name = "Bob", Grade = "B", Age = 22 },
    new Student { Name = "Charlie", Grade = "A", Age = 21 },
    new Student { Name = "David", Grade = "B", Age = 20 }
};
var sortedStudents = students.OrderBy(student => student.Grade)
                             .ThenBy(student => student.Age);


经过 OrderBy 方法根据成绩进行升序排序后,students 列表将变为:

Student { Name = "Alice", Grade = "A", Age = 20 }
Student { Name = "Charlie", Grade = "A", Age = 21 }
Student { Name = "Bob", Grade = "B", Age = 22 }
Student { Name = "David", Grade = "B", Age = 20 }


然后,应用 ThenBy 方法在已排序的结果上根据年龄进行升序排序,最终的排序结果为:

Student { Name = "Alice", Grade = "A", Age = 20 }
Student { Name = "David", Grade = "B", Age = 20 }
Student { Name = "Charlie", Grade = "A", Age = 21 }
Student { Name = "Bob", Grade = "B", Age = 22 }


在上述示例中,我们有一个学生列表 students,每个学生都有姓名、成绩和年龄属性。我们首先使用 OrderBy 方法根据学生的成绩进行升序排序,然后使用 ThenBy 方法在已排序的结果上根据学生的年龄进行升序排序。


执行结果 sortedStudents 是一个按成绩和年龄排序的学生列表。如果学生有相同的成绩,那么他们将按照年龄进行排序。


注意,ThenBy 方法必须在 OrderBy 或 OrderByDescending 方法之后使用,以确保正确的排序顺序。


这个示例展示了如何使用 ThenBy 方法在已排序的结果上进行进一步的排序操作,以满足复合排序的需求。


ThenByDescending

  • ThenByDescending: 在已排序的结果集上根据额外的键进行降序排序。

相关文章
|
6月前
|
自然语言处理 C# Windows
C#开源免费的Windows右键菜单管理工具
C#开源免费的Windows右键菜单管理工具
|
6月前
|
IDE C# 开发工具
一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
188 6
|
1月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
47 0
|
2月前
|
开发框架 自然语言处理 .NET
C#一分钟浅谈:LINQ 查询表达式的使用技巧
【9月更文挑战第6天】LINQ(Language Integrated Query)是C#开发中的强大工具,使查询数据集合变得简单且接近自然语言。本文从基础入手,通过具体示例讲解LINQ查询表达式的使用技巧,包括过滤、排序和分组等操作。同时,文章还探讨了常见问题及解决方法,如性能优化、过早枚举和类型转换等,帮助开发者写出更高效、易维护的代码。
92 15
|
1月前
|
SQL JSON BI
最好的 C# .NET 报告工具
最好的 C# .NET 报告工具
35 0
|
6月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
330 2
|
5月前
|
算法 C#
C#开源实用的工具类库,集成超过1000多种扩展方法
C#开源实用的工具类库,集成超过1000多种扩展方法
|
5月前
|
开发框架 .NET 程序员
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
33 0
|
6月前
|
SQL 开发框架 .NET
C#linq表达式的应用
C#linq表达式的应用
39 0