前言
我们在C#开发中需要经常对集合中的数据进行处理,比如我需要将一个Int类型的集合数据转换成字符串,如果你不知道Linq的使用,大概率你会写一个循环,然后将集合中的每个int类型的数据转换成string类型,这需要你单独写一个方法,但是如果你知道了Linq的用法,一行代码就可以解决问题,本文就是详细介绍Linq的用法,从而极大地加快我们开发软件的速度。
1、定义与初始化一个类
自定义一个类,类中有两个字段,一个Int类型,一个string类型。
csharp
class Student
{
public Student(int age, string name)
{
this.Age = age;
this.Name = name;
}
public int Age = 0;
public string Name;
}
然后声明一个Student类型的List集合对象,并往这个集合中添加5个Student对象,如下:
csharp
List<Student> list = new List<Student>();
Student student1 = new Student(10, "小王");
Student student2 = new Student(10, "小李");
Student student3 = new Student(18, "小陈");
Student student4 = new Student(28, "小孙");
Student student5 = new Student(38, "小古");
list.Add(student1);
list.Add(student2);
list.Add(student3);
list.Add(student4);
list.Add(student5);
2、使用Linq中的select改变集合的值
我们使用Linq中的select语句,将集合中的元素进行修改,最后调用ToList()方法将转换后的数据形成一个新的集合中并赋值给selectList 。下面的代码将年龄增加了10岁,
csharp
List<Student> selectList = list.Select(item => new Student(item.Age + 10, item.Name)).ToList();//select的投射
selectList.ForEach(item => Console.WriteLine($"{item.Name}:{item.Age }"));
输出结果:
最后调用集合的ForEach来输出每个集合中的元素,我们会发现每个成员的年龄都增加了10岁。
csharp
小王:20
小李:20
小陈:28
小孙:38
小古:48
3、使用Linq中的where筛选集合的值
我们使用where来筛选出集合汇总年龄大于18的值,然后输出姓名
csharp
List<Student> whereList = list.Where(item => item.Age > 18).ToList();//where的筛选
whereList.ForEach(item => Console.WriteLine(item.Name));
输出结果:
由于小孙28岁,小谷38岁,只有这两个值满足条件,所以最后被输出了。
csharp
小孙
小古
4、求集合最大值、最小值
下面的代码找出最大、最小年龄的成员
int maxList = list.Max(item => item.Age);//求最大值
int minList = list.Max(item => item.Age);//求最小值
5、使用Linq中的排序
5.1 升序
下面的代码使用Linq中的OrderBy,来让集合根据年龄进行升序排列
csharp
List<Student> orderList = list.OrderBy(item => item.Age).ToList();//升序
orderList.ForEach(item => Console.WriteLine($"{item.Name}:{item.Age }"));
输出:
可以看到最终的输出结果是按照年龄的从小到大排列
csharp
小王:10
小李:10
小陈:18
小孙:28
小古:38
5.2 降序
下面的代码使用Linq中的OrderByDescending,来让集合根据年龄进行降序排列
csharp
List<Student> orderDescendingList = list.OrderByDescending(item => item.Age).ToList();//降序
orderDescendingList.ForEach(item => Console.WriteLine($"{item.Name}:{item.Age }"));
输出:
可以看到最终的输出结果是按照年龄的从大到小排列
csharp
小古:38
小孙:28
小陈:18
小王:10
小李:10
6、使用Linq中的分组
我们使用GroupBy对集合进行分组,分组的条件是按照年龄分组,也就是年龄相同的成员作为同一个组,代码如下:
var group = list.GroupBy(item => item.Age).ToList();//分组
foreach (var item in group)
{
Console.WriteLine(item.Key);
foreach (var subitem in item)
{
Console.WriteLine($"{subitem.Name}:{subitem.Age }");
}
}
输出:
从最终的结果看,总共输出了4个组,因为年龄总共有10、18、28、38,并且年龄为10的这一组有两个成员,这两个成员分别是"小王"、"小李"
csharp
10
小王:10
小李:10
18
小陈:18
28
小孙:28
38
小古:38