[.NET 3.x新特性四]LinQ查询语法

简介:
每天记录一下C#3.0的一些特性,本文主要要介绍的是LinQ的一些类查询的用法。在前面几篇文章中我们了解到了C#3.0中的一些新特性,而我觉得在C#3.0中改变最大或着说变化最大的就要属LinQ了。今天我们通过一些例子来讲解一下他的一些用法,因为我也是在摸索阶段真正项目中还没有涉及到这中用法。

    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      }

     我们还实例化了一个列表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);

     接下来我们可以通过类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;

     通过上面的注释就知道我为什么喜欢叫他类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;

     是不是很爽呢?在感觉中还是有一点不够完美,如: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();

    List<T>这个应该很经常见到吧,在.NET2.0中泛型编程中为了类型安全微软都推荐我们用这个,而不用ArrayList,其实这么简单都要归功于方法的扩展。我们不仅可以把他转换为List<T>还可以把它转换为数组等等,如果有Key,Value查询的我们还可以把它转换为字典Dictionary<Tkey,TValue>等等。对于LinQ对数据库的查询对XML格式字符串或文件的解析等我们以后在慢慢的道来。

本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/09/07/dotnet_3x_query_syntax.html,如需转载请自行联系原作者

相关文章
|
2月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
108 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
2月前
|
开发框架 JavaScript .NET
asp.net中条件查询+分页
asp.net中条件查询+分页
|
10天前
|
人工智能 开发框架 Devops
.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。
【7月更文挑战第4天】.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。此外,讨论了.NET如何通过性能优化、DevOps集成、AI与ML支持以及开源策略应对未来挑战,为开发者提供强大工具,共创软件开发新篇章。
20 3
|
8天前
|
C#
效率提升利器:一个在线的.NET源码查询网站
效率提升利器:一个在线的.NET源码查询网站
|
1月前
|
存储 编译器
【.NET Core】特性(Attribute)详解
【.NET Core】特性(Attribute)详解
33 2
|
2月前
|
机器学习/深度学习 存储 开发工具
【专栏】解读 .NET 技术的先进特性
【4月更文挑战第29天】.NET 技术推动各行业软件开发创新,提供高效开发环境(如Visual Studio)和跨平台能力(.NET Core),支持多语言和函数式编程。其生态系统繁荣,NuGet包含大量开源库。同时,.NET整合云服务(Azure)和机器学习(ML.NET),强化应用扩展性和智能处理,巩固其在现代开发中的关键角色。
|
2月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
241 2
|
2月前
|
开发框架 安全 .NET
C# .NET面试系列一:基础语法
<h2>基础语法 #### 1. 字符串中 string str = null 和 string str = "" 和 string str = string.Empty 的区别? string str=null: ```c# 这表示字符串变量str被初始化为null,即它不引用任何对象。这与空字符串是不同的,因为空字符串是一个具有零长度的字符串对象,不会分配内存空间 ``` string.Empty: ```c# 这表示字符串变量str被初始化为空字符串,即一个具有零长度的字符串对象。这与null是不同的,因为str引用了一个空字符串对象 ``` string str="" :
86 1
|
2月前
|
SQL 数据库
使用ADO.NET查询和操作数据
使用ADO.NET查询和操作数据
|
2月前
|
开发框架 .NET Java
ASP.NET Core高级编程--C#基本特性(一)
本文章简略介绍C#的部分特性