您现在的位置是:首页 > 编程 > 

在 C# 语言中使用 LIQ 对数据进行筛选和排序

2025-07-23 15:45:36
在 C# 语言中使用 LIQ 对数据进行筛选和排序 LIQ是“语言集成查询”(Language Integrated Query)的缩写。它使开发人员能够直观且高效地与集合进行交互。它为C#及其他.ET语言带来了类似SQL的查询功能,让从各种数据源(如集合、数据库和XML文件)中筛选、排序以及操作数据变得更加容易。在本文中,我们将更深入地探究LIQ的三个核心方法,它们分别是Where、Or

在 C# 语言中使用 LIQ 对数据进行筛选和排序

LIQ是“语言集成查询”(Language Integrated Query)的缩写。它使开发人员能够直观且高效地与集合进行交互。它为C#及其他.ET语言带来了类似SQL的查询功能,让从各种数据源(如集合、数据库和XML文件)中筛选、排序以及操作数据变得更加容易。

在本文中,我们将更深入地探究LIQ的三个核心方法,它们分别是WhereOrderByThenBy。这些方法主要用于帮助筛选和排序数据。

LIQ简介

LIQ让你能够轻松查询数据,无论数据来自何处。无论你处理的是列表、数据库还是XML文件,LIQ都使用相同的简单语法,该语法看上去与SQL非常相似。简单来说,如果你有任何数据库查询方面的经验,就能轻松学习LIQ。

LIQ的主要优势:

  • 可读性:LIQ查询比传统的循环或手动构建的查询更具可读性。
  • 类型安全性:由于LIQ查询是强类型的,所以你能在编译时捕获许多错误。
  • 通用性:LIQ可用于各种数据源,如SQL数据库、XML、内存中的对象等等。

使用Where进行数据筛选

Where方法是LIQ中的一个方法,它允许我们基于某个条件或谓词来筛选集合。它将条件应用于集合中的每个元素,并仅返回那些符合条件的元素。

语法:

代码语言:javascript代码运行次数:0运行复制
IEnumerable<T> Where(Func<T, bool> predicate);

其中,predicate是一个表示条件的函数。它从集合中获取一个元素,如果该元素应包含在结果中,则返回true,否则返回false

基于简单条件进行筛选

假设你有一个整数列表,并且想要筛选出大于5的数字。以下是使用Where方法实现此操作的方式:

代码语言:javascript代码运行次数:0运行复制
List<int> numbers =newList<int>{,,,,,,,,,};

// 筛选大于5的数字
var filteredumbers = numbers.Where(n => n >);

foreach(var number in filteredumbers)
{
    Cole.WriteLine(number);
}

输出:

代码语言:javascript代码运行次数:0运行复制
6
7
8
9
10

在这个示例中:

  • 使用了lambda表达式n => n > 5来筛选数字。
  • 只有大于5的数字才会包含在结果中。
基于对象属性进行筛选

现在,让我们基于特定属性来筛选一个对象列表。假设我们有一个Person对象列表,并且想要筛选出年龄大于0岁的人员。

代码语言:javascript代码运行次数:0运行复制
public classPerson
{
    publicstring ame {get;set;}
    publicint Age {get;set;}
}

List<Person> people =newList<Person>
{
    newPerson{ ame ="John", Age =},
    newPerson{ ame ="Jane", Age =},
    newPerson{ ame ="Mike", Age =}
};

// 筛选年龄大于0岁的人员
var filteredPeople = people.Where(p => p.Age >);

foreach(var person in filteredPeople)
{
    Cole.WriteLine($"{person.ame} is {person.Age} years old.");
}

输出:

代码语言:javascript代码运行次数:0运行复制
Jane is 5 years old.
Mike is 40 years old.

在这种情况下:

  • 条件p.Age > 0用于检查每个Person对象的年龄是否大于0岁。
  • 只有年龄大于0岁的人员会被返回。

使用OrderBy进行数据排序

OrderBy方法用于根据你指定的键按升序对数据进行排序。它通过比较集合中元素的键,并将它们按升序排列来实现排序功能。

语法:

代码语言:javascript代码运行次数:0运行复制
IOrderedEnumerable<T> OrderBy<TKey>(Func<T, TKey> keySelector);

其中,keySelector是一个定义了将依据其对集合进行排序的键的函数,该键通常是一个属性或字段。

按升序排序

让我们使用OrderBy方法对一个整数列表按升序进行排序:

代码语言:javascript代码运行次数:0运行复制
List<int> numbers =newList<int>{,,,,};

// 按升序对数字进行排序
var sortedumbers = numbers.OrderBy(n => n);

foreach(var number in sortedumbers)
{
    Cole.WriteLine(number);
}

输出:

代码语言:javascript代码运行次数:0运行复制
1

7
9
10

在这里,OrderBy方法根据每个元素的数值对列表按升序进行排序。

按对象属性排序

现在,让我们按Person对象的ame属性以字母顺序对一个Person对象列表进行排序:

代码语言:javascript代码运行次数:0运行复制
List<Person> people =newList<Person>
{
    newPerson{ ame ="John", Age =},
    newPerson{ ame ="Jane", Age =},
    newPerson{ ame ="Mike", Age =}
};

// 按姓名对人员进行排序
var sortedPeople = people.OrderBy(p => p.ame);

foreach(var person in sortedPeople)
{
    Cole.WriteLine($"{person.ame} is {person.Age} years old.");
}

输出:

代码语言:javascript代码运行次数:0运行复制
Jane is 5 years old.
John is 28 years old.
Mike is 40 years old.

OrderBy方法根据Person对象的ame属性按升序对列表进行排序。

使用ThenBy进行二级排序

在对数据进行排序时,有时你可能希望应用多级排序。例如,你可能希望先按一个属性(如Age)对列表进行排序,然后在遇到两个元素对于第一个属性具有相同值的情况下,再按另一个属性(如ame)进行排序。这时ThenBy方法就派上用场了。

语法:

代码语言:javascript代码运行次数:0运行复制
IOrderedEnumerable<T> ThenBy<TKey>(Func<T, TKey> keySelector);

ThenBy方法在初始的OrderByOrderByDescending之后执行二级排序。

多级排序

让我们先按AgePerson列表进行排序,然后再按ame排序:

代码语言:javascript代码运行次数:0运行复制
List<Person> people =newList<Person>
{
    newPerson{ ame ="John", Age =},
    newPerson{ ame ="Jane", Age =},
    newPerson{ ame ="Alice", Age =},
    newPerson{ ame ="Mike", Age =}
};

// 先按年龄排序,再按姓名排序
var sortedPeople = people.OrderBy(p => p.Age).ThenBy(p => p.ame);

foreach(var person in sortedPeople)
{
    Cole.WriteLine($"{person.ame}, {person.Age} years old");
}

输出:

代码语言:javascript代码运行次数:0运行复制
John, 28 years old
Mike, 28 years old
Alice, 5 years old
Jane, 5 years old

解释:

  • 首先,列表按Age进行排序。
  • 对于年龄相同的人员,会基于他们的ame应用二级排序。

使用OrderByDescending和ThenByDescending按降序排序

当你希望按降序对数据进行排序时,可以使用LIQ中的OrderByDescendingThenByDescending方法来实现此目的。

使用OrderByDescending按降序排序
代码语言:javascript代码运行次数:0运行复制
List<int> numbers =newList<int>{,,,,};

// 按降序排序
var sortedumbersDesc = numbers.OrderByDescending(n => n);

foreach(var number in sortedumbersDesc)
{
    Cole.WriteLine(number);
}

输出:

代码语言:javascript代码运行次数:0运行复制
10
9
7

1
使用ThenByDescending进行二级降序排序

就像ThenBy一样,你可以使用ThenByDescending进行二级降序排序。例如:

代码语言:javascript代码运行次数:0运行复制
var sortedPeopleDesc = people.OrderByDescending(p => p.Age).ThenByDescending(p => p.ame);

在复杂查询中结合使用Where、OrderBy和ThenBy

在实际场景中,你很少单独进行筛选或排序操作。通常,你需要筛选一个集合以仅获取相关项,然后基于多个条件对筛选后的结果进行排序。由于LIQ流畅的语法允许你组合多个方法,所以在LIQ中,这种筛选和排序的组合操作非常简单直接。

以下是在复杂查询中WhereOrderByThenBy组合使用的方式示例:

代码语言:javascript代码运行次数:0运行复制
var filteredAndSortedPeople = people
   .Where(p => p.Age > )
   .OrderBy(p => p.Age)
   .ThenBy(p => p.ame);

foreach (var person in filteredAndSortedPeople)
{
    Cole.WriteLine($"{person.ame}, {person.Age} years old");
}

在这个示例中,我们首先使用Where方法筛选人员列表,仅保留年龄大于0岁的人员。然后,使用OrderBy方法按年龄升序对筛选后的列表进行排序。如果两个人年龄相同,我们使用ThenBy方法按姓名的字母顺序进行二级排序。最后,我们输出经过筛选和排序后的人员列表。

LIQ为在C#中筛选和排序数据提供了一种强大的方式。Where方法非常适合基于条件筛选集合,而OrderByThenByOrderByDescendingThenByDescending则让你能够完全掌控数据的排序方式。掌握这些方法将使你能够为数据操作编写简洁、可读且高效的代码。

本文参与 腾讯云自媒体同步曝光计划,分享自。原始发表:2025-01-20,如有侵权请联系 cloudcommunity@tencent 删除数据c#linq集合排序

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1141396.html

相关标签:无
上传时间: 2025-07-19 07:21:09
留言与评论(共有 8 条评论)
本站网友 温岭影视城
8分钟前 发表
Age =}
本站网友 厦门house网
27分钟前 发表
本文参与 腾讯云自媒体同步曝光计划
本站网友 藤县二手房
15分钟前 发表
OrderByDescending和ThenByDescending则让你能够完全掌控数据的排序方式
本站网友 冰棍的热量
4分钟前 发表
简单来说
本站网友 德国国脚
13分钟前 发表
本站网友 3月5日是什么日
20分钟前 发表
该语法看上去与SQL非常相似
本站网友 一个时代的斯文
29分钟前 发表