linq关键字
以下是 LINQ(Language Integrated Query)中常见的关键字及其作用,并给出一个示例以展示其执行结果:
from
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
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
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
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
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
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
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
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
: 在已排序的结果集上根据额外的键进行降序排序。