ALinq 入门学习(七)--OrderBy 排序查询
2010-06-08 11:35 贺臣 阅读(5078) 评论(7) 编辑 收藏 举报好些天没有写文章了,博客园也发生了很多变化。最近园子里面火药味越来越浓了。有时候看着想过去发表一下自己的观点,仔细想想还是算了,我不想被卷入这个漩涡中。还是老老实实写自己的文章,记录一下自己所学的东西,学习别人的程序的思考方式,分享一下自己的学习经验。不过这里还是希望博客园中的同仁们,共同的维护好这里的学习氛围,彼此共勉,更多的提点而不是指责。
1.ALinq 简单的排序查询
在ALinq中查询数据排序是使用OrderBy关键词,这和Linq to SQL是没有区别的,查询的时候默认的是升序排列方式。下面是一个简单的ALinq 查询排序功能例子
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2 {
3 DbManagerDataContext context = new DbManagerDataContext(connectionString);
4 var query = from s in context.TabStudent orderby s.createTime select s;
5 foreach (var stu in query)
6 {
7 Console.WriteLine("stu.createTime ==>"+stu.createTime.ToString());
8 }
9 }
这个方法使用了Linq 语句对数据库数据进行查询,并且更具createTime字段进行升序排列。
2.ALinq 带条件排序查询
对于带条件查询的排序查询页非常简单,只需要加入where条件即可。但是值得注意的是where 和orderby关键字的前后顺序是没有关系的,只要符合业务逻辑,这都是可以执行的。而在sql语句中这是由明确规定的前后关系。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2 {
3 DbManagerDataContext context = new DbManagerDataContext(connectionString);
4 var query = from s in context.TabStudent where s.Id!=3 orderby s.createTime select s;
5 foreach (var stu in query)
6 {
7 Console.WriteLine("stu.createTime ==>" + stu.createTime.ToString());
8 }
9 }
3.ALinq 降序查询
ALinq中默认排序时升序排列,使用关键之descending可以进行降序查询。下面是简单的降序查询例子
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2 {
3 DbManagerDataContext context = new DbManagerDataContext(connectionString);
4 var query = from s in context.TabStudent orderby s.createTime descending select s;
5 foreach (var stu in query)
6 {
7 Console.WriteLine("stu.createTime ==>" + stu.createTime.ToString());
8 }
9 }
4.ALinq 组合排序查询
Sql中不仅仅可以单个字段进行排序查询,还可以同时根据多个字段进行排序查询。ALinq也同样提供了这样的机制。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2 {
3 DbManagerDataContext context = new DbManagerDataContext(connectionString);
4 var query = from s in context.TabStudent orderby s.createTime,s.classID select s;
5 foreach (var stu in query)
6 {
7 Console.WriteLine("stu.createTime ==>" + stu.createTime.ToString());
8 Console.WriteLine("stu.classID ==>" + stu.classID.ToString());
9 }
10 }
这个方法中的查询首先按照createTime字段升序查询,然后再按照classID升序查询。如果比指定排序规则都为默认
5.ALinq 组合查询指定排序规则
sql中多个字段查询的时候,可以指定每个字段的排序规则。上面也提到过了,ALinq也可以指定多个字段的排序规则
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2 {
3 DbManagerDataContext context = new DbManagerDataContext(connectionString);
4 var query = from s in context.TabStudent orderby s.createTime, s.classID descending select s;
5 foreach (var stu in query)
6 {
7 Console.WriteLine("stu.createTime ==>" + stu.createTime.ToString());
8 Console.WriteLine("stu.classID ==>" + stu.classID.ToString());
9 }
10 }
这个方法中的查询首先按照createTime字段升序查询,然后再按照classID降序查询。如果比指定排序规则都为默认
6.ALinq 使用Lamda表达式简单查询
Lamda表达式是的代码更加的简洁,程序逻辑更加清楚。ALinq也支持Lamda表达式查询。下面是简单排序查询的Lamda查询例子
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2 {
3 DbManagerDataContext context = new DbManagerDataContext(connectionString);
4 List<TabStudent> list = context.TabStudent.OrderBy(s => s.createTime).ToList<TabStudent>();
5 foreach (TabStudent stu in list)
6 {
7 Console.WriteLine("stu.createTime ==>" + stu.createTime.ToString());
8 }
9 }
这句代码是createTime字段升序查询
7.ALinq 使用Lamda表达式降序查询
Lamda表达式降序查询就要使用到OrderByDescending这个函数,OrderBy函数式默认的升序查询
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2 {
3 DbManagerDataContext context = new DbManagerDataContext(connectionString);
4 List<TabStudent> list = context.TabStudent.OrderByDescending(s => s.createTime).ToList<TabStudent>();
5 foreach (TabStudent stu in list)
6 {
7 Console.WriteLine("stu.createTime ==>" + stu.createTime.ToString());
8 }
9 }
8.ALinq 中Lamda表达式组合查询
Lamda表达式同时也可以支持多个字段的组合查询,而且还能分别指定查询规则。下面的例子是使用两个不同的字段组合查询,而且两个字段的排序查询方式不同。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2 {
3 DbManagerDataContext context = new DbManagerDataContext(connectionString);
4 //List<TabStudent> list = context.TabStudent.OrderBy(s => s.createTime).ThenBy(s => s.classID).ToList<TabStudent>();
5 List<TabStudent> list = context.TabStudent.OrderBy(s => s.createTime).ThenByDescending(s => s.classID).ToList<TabStudent>();
6 foreach (var stu in list)
7 {
8 Console.WriteLine("stu.createTime ==>" + stu.createTime.ToString());
9 Console.WriteLine("stu.classID ==>" + stu.classID.ToString());
10 }
11 }
这里有个问题重新说明一下:虽然Linq语句中查询关键字前后顺序可以调换使用,而且能正常编译运行,但是在某个业务逻辑穿插在其中之后还是有查询条件规则前后的问题。比如之后的这个例子,两个字段组合查询,Orderby 调换位置之后仍然可以编译通过,但是查询的结果就可能不同了。