代码改变世界

ALinq 入门学习(七)--OrderBy 排序查询

2010-06-08 11:35  贺臣  阅读(5081)  评论(7编辑  收藏  举报

好些天没有写文章了,博客园也发生了很多变化。最近园子里面火药味越来越浓了。有时候看着想过去发表一下自己的观点,仔细想想还是算了,我不想被卷入这个漩涡中。还是老老实实写自己的文章,记录一下自己所学的东西,学习别人的程序的思考方式,分享一下自己的学习经验。不过这里还是希望博客园中的同仁们,共同的维护好这里的学习氛围,彼此共勉,更多的提点而不是指责。

 

1.ALinq 简单的排序查询

在ALinq中查询数据排序是使用OrderBy关键词,这和Linq to SQL是没有区别的,查询的时候默认的是升序排列方式。下面是一个简单的ALinq 查询排序功能例子

ALinq 简单查询排序
1 public void FunctionSimple()
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语句中这是由明确规定的前后关系。

ALinq 带条件排序查询
1  public void FunctionOrderbyCondition()
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可以进行降序查询。下面是简单的降序查询例子

ALinq 降序查询
1 public void FunctionOrderbyDesc()
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也同样提供了这样的机制。

ALinq 多字段组合排序查询
 1 public void FunctionOrderbyCombination()
 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也可以指定多个字段的排序规则

ALinq 组合查询指定排序规则
 1 public void FunctionOrderByCombinationDesc()
 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查询例子

ALinq Lamda表达式排序简单查询
1 public void FunctionOrderByLamda()
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函数式默认的升序查询

ALinq Lamda表达式降序查询
1 public void FunctionOrderByLamdaDesc()
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表达式同时也可以支持多个字段的组合查询,而且还能分别指定查询规则。下面的例子是使用两个不同的字段组合查询,而且两个字段的排序查询方式不同。

ALinq Lamda表达式组合查询
 1 public void FunctionCombinationLamda()
 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 调换位置之后仍然可以编译通过,但是查询的结果就可能不同了。 


作者:情缘
出处:http://www.cnblogs.com/qingyuan/
关于作者:从事仓库,生产软件方面的开发,在项目管理以及企业经营方面寻求发展之路
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
联系方式: 个人QQ  821865130 ; 仓储技术QQ群 88718955,142050808 ;
吉特仓储管理系统 开源地址: https://github.com/hechenqingyuan/gitwms