[.NET 3.x新特性四]LinQ查询语法
每天记录一下C#3.0的一些特性,本文主要要介绍的是LinQ的一些类查询的用法。在前面几篇文章中我们了解到了C#3.0中的一些新特性,而我觉得在C#3.0中改变最大或着说变化最大的就要属LinQ了。今天我们通过一些例子来讲解一下他的一些用法,因为我也是在摸索阶段真正项目中还没有涉及到这中用法。
LinQ查询的实现方法在前几篇文章中也有提到过,那就是LinQ是通过方法扩展和Lambda表达式来实现的。下面我们来举个例子,在上几篇文章中我们知道有一个自动属性,我们定义了一个类,代码如下:
我们还实例化了一个列表List<Person>,并通过Where扩展方法对其进行过滤,代码如下:
接下来我们可以通过类SQL查询的方法来取得我们所要的相应集合,我把它叫做类SQL查询是因为我感觉他有点像SQL的语句,在今后的一系列的文章中我们将慢慢的对其(LinQ)进行分析,我们对上面的代码修改如下:
通过上面的注释就知道我为什么喜欢叫他类SQL查询了吧,为了能够在VS智能提示中更好的发挥微软把select移到语句的末尾,而且我们还能够对所得到的结果进行排序。如果用这个对数据库进行查询,他将自动生成标准的SQL语句,然后在对数据库进行查询,为了对性能的考虑它是一种滞后运行(不知道怎么说,就是等待运行的时候才生成SQL字符串)。上面我们是返回了整个Person实例,我们也可以只返回实例中的某一个字段:
是不是很爽呢?在感觉中还是有一点不够完美,如:IEnumerable<T>这个东东我们平时是不是很少用,看他就有点不爽,说不定有写人还不认识她呢?那我们能不能用一个比较好看的来表示呢?请看下面的代码:
List<T>这个应该很经常见到吧,在.NET2.0中泛型编程中为了类型安全微软都推荐我们用这个,而不用ArrayList,其实这么简单都要归功于方法的扩展。我们不仅可以把他转换为List<T>还可以把它转换为数组等等,如果有Key,Value查询的我们还可以把它转换为字典Dictionary<Tkey,TValue>等等。对于LinQ对数据库的查询对XML格式字符串或文件的解析等我们以后在慢慢的道来。
LinQ查询的实现方法在前几篇文章中也有提到过,那就是LinQ是通过方法扩展和Lambda表达式来实现的。下面我们来举个例子,在上几篇文章中我们知道有一个自动属性,我们定义了一个类,代码如下:
1 public class Person
2 {
3 public string Name { get; set; }
4 public string NickName { get; set; }
5 public int Age { get; set; }
6 }
2 {
3 public string Name { get; set; }
4 public string NickName { get; set; }
5 public int Age { get; set; }
6 }
我们还实例化了一个列表List<Person>,并通过Where扩展方法对其进行过滤,代码如下:
1 List<Person> people = new List<Person>
2 {
3 new Person{Name="小兵",NickName="网魂小兵",Age=23},
4 new Person{Name="青青",NickName="QQing",Age=22}
5 };
6 //取得people中Age为23的Person实例。
7 IEnumerable<Person> results = people.Where(p => p.Age == 23);
8 //计算people中的平均岁数。
9 int perAge = people.Average(p => p.Age);
2 {
3 new Person{Name="小兵",NickName="网魂小兵",Age=23},
4 new Person{Name="青青",NickName="QQing",Age=22}
5 };
6 //取得people中Age为23的Person实例。
7 IEnumerable<Person> results = people.Where(p => p.Age == 23);
8 //计算people中的平均岁数。
9 int perAge = people.Average(p => p.Age);
接下来我们可以通过类SQL查询的方法来取得我们所要的相应集合,我把它叫做类SQL查询是因为我感觉他有点像SQL的语句,在今后的一系列的文章中我们将慢慢的对其(LinQ)进行分析,我们对上面的代码修改如下:
1 List<Person> people = new List<Person>
2 {
3 new Person{Name="小兵",NickName="网魂小兵",Age=23},
4 new Person{Name="青青",NickName="QQing",Age=22}
5 };
6 //在SQL中:SELECT p.* FROM people p WHERE p.Age = 22
7 IEnumerable<Person> results = from p in people
8 where p.Age == 22
9 select p;
10 //在SQL中:SELECT p1.* FROM people p1 WHERE p1.NickName
ORDER BY
DESC
11 IEnumerable<Person> results1 = from p1 in people
12 where p1.NickName.StartsWith("Q")
13 orderby p1.Name descending
14 select p1;
2 {
3 new Person{Name="小兵",NickName="网魂小兵",Age=23},
4 new Person{Name="青青",NickName="QQing",Age=22}
5 };
6 //在SQL中:SELECT p.* FROM people p WHERE p.Age = 22
7 IEnumerable<Person> results = from p in people
8 where p.Age == 22
9 select p;
10 //在SQL中:SELECT p1.* FROM people p1 WHERE p1.NickName


11 IEnumerable<Person> results1 = from p1 in people
12 where p1.NickName.StartsWith("Q")
13 orderby p1.Name descending
14 select p1;
通过上面的注释就知道我为什么喜欢叫他类SQL查询了吧,为了能够在VS智能提示中更好的发挥微软把select移到语句的末尾,而且我们还能够对所得到的结果进行排序。如果用这个对数据库进行查询,他将自动生成标准的SQL语句,然后在对数据库进行查询,为了对性能的考虑它是一种滞后运行(不知道怎么说,就是等待运行的时候才生成SQL字符串)。上面我们是返回了整个Person实例,我们也可以只返回实例中的某一个字段:
1 IEnumerable<string> results = from p in people
2 where p.NickName.StartsWith("Q")
3 orderby p.Name descending
4 select p.Name;
2 where p.NickName.StartsWith("Q")
3 orderby p.Name descending
4 select p.Name;
是不是很爽呢?在感觉中还是有一点不够完美,如:IEnumerable<T>这个东东我们平时是不是很少用,看他就有点不爽,说不定有写人还不认识她呢?那我们能不能用一个比较好看的来表示呢?请看下面的代码:
1 List<string> results = (from p in people
2 where p.NickName.StartsWith("Q")
3 orderby p.Name descending
4 select p.Name).ToList();
2 where p.NickName.StartsWith("Q")
3 orderby p.Name descending
4 select p.Name).ToList();
List<T>这个应该很经常见到吧,在.NET2.0中泛型编程中为了类型安全微软都推荐我们用这个,而不用ArrayList,其实这么简单都要归功于方法的扩展。我们不仅可以把他转换为List<T>还可以把它转换为数组等等,如果有Key,Value查询的我们还可以把它转换为字典Dictionary<Tkey,TValue>等等。对于LinQ对数据库的查询对XML格式字符串或文件的解析等我们以后在慢慢的道来。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架