代码改变世界

ALinq 入门学习(四)--查询关键字

2010-05-05 17:41  贺臣  阅读(2101)  评论(9编辑  收藏  举报

在SQL查询中对应着各种各样的查询关键字,如果distinct,count,sum 等等一些关键字。在Linq to SQL 中对这些关键字的使用做了封装,同样在ALinq 中也有相同的操作函数。

 

1. ALinq 过滤查询重复数据 Distinct

ALinq 过滤查询重复数据Distinct
 1 /// <summary>
 2         /// ALinq 查询关键字 Distinct
 3         /// </summary>
 4         public void FunctionDistinct()
 5         {
 6             OA_DBDataContext context = new OA_DBDataContext(new SqlConnection(connectionString));
 7             context.Log = Console.Out;
 8             var alinq = (from s in context.TabMenu select s.ParentID).Distinct();
 9             foreach (var value in alinq)
10             {
11                 Console.WriteLine(value);
12             }
13             Console.WriteLine("\n");
14         }

 

这段代码,查询过滤了数据库中ParentID 字段,过了数据库集合中所有的重复数据,这个查询相当于SQL 中的关键字Distinct。 该语句对应生成的sql语句格式如下:SELECT DISTINCT [columnname] FROM [table].

 

2.ALinq 中匿名对象查询

ALinq 中匿名对象查询
 1 /// <summary>
 2         /// ALinq 匿名形式查询
 3         /// </summary>
 4         public void FunctionAnonymity()
 5         {
 6             OA_DBDataContext context = new OA_DBDataContext(new SqlConnection(connectionString));
 7             context.Log = Console.Out;
 8             var anonymity = from c in context.TabMenu select new { 
 9                 Name=c.MenuName,
10                 Level=c.MenuLevel
11             };
12             foreach (var an in anonymity)
13             {
14                 Console.WriteLine(an.Name+"  ==>  "+an.Level);
15             }
16             Console.WriteLine("\n");
17         }

 

.NET 3.0 出现匿名对象之后,是的.net 平台展现了新的活力。Linq 查询的支持,使之更具特色,然而ALinq也毫不逊色于Linq,它可以查询封装为匿名对象。

 

3.ALinq 查询调用本地方法

ALinq 查询调用本地函数
 1 /// <summary>
 2         /// ALinq 查询调用本地方法
 3         /// </summary>
 4         public void FunctionLocalMethd()
 5         {
 6             OA_DBDataContext context = new OA_DBDataContext(new SqlConnection(connectionString));
 7             context.Log = Console.Out;
 8             var anonymity = from c in context.TabMenu
 9                             select new
10                             {
11                                 Name = c.MenuName,
12                                 Level = ConvertType(c.MenuLevel)
13                             };
14             foreach (var an in anonymity)
15             {
16                 Console.WriteLine(an.Name + "  ==>  " + an.Level);
17             }
18             Console.WriteLine("\n");
19         }
20 
21         /// <summary>
22         /// 被调用的本地方法
23         /// </summary>
24         /// <param name="level"></param>
25         /// <returns></returns>
26         public string ConvertType(int level)
27         {
28             if (level == 1)
29             {
30                 return "一级菜单";
31             }
32             if (level == 2)
33             {
34                 return "二级菜单";
35             }
36             else
37             {
38                 return "父级菜单";
39             }
40         }

 

ALinq 除了查询可以封装匿名对象之外,同时还可以查询时调用本地方法。该段代码在查询的时候就调用了本地方法ConvertType(),它将自动信息作了相应的转换。值得注意的地方是,这个调用本地方法,不是在sql语句查询的时候生成的,也就是说不会生成类似sql 中 when case语句。它是在程序结果输出的过程中调用的本地方法。

 

4.ALinq 聚合函数 Count

ALinq 聚合函数Count
 1  /// <summary>
 2         /// ALinq 中查询数据行数
 3         /// </summary>
 4         public void FunctionCount()
 5         {
 6             OA_DBDataContext context = new OA_DBDataContext(new SqlConnection(connectionString));
 7             context.Log = Console.Out;
 8             int count = context.TabMenu.Count();
 9             Console.WriteLine("总数据行数:  ==>  "+count);
10             count = context.TabMenu.Count(c=>c.ParentID==2);
11             Console.WriteLine("菜单编号为2的数据行数:  ==>  "+count);
12             long longCount=context.TabMenu.LongCount();
13             Console.WriteLine("长整形数据行数:  ==>  "+longCount);
14             Console.WriteLine("\n");
15         }

 

知道Linq to SQL 中的聚合函数使用方法,也一定知道ALinq中的聚合函数count 的使用。Count 除了查询所有的数据之外,还可以带条件查询,和之前讲过的First 函数的使用方法是一样的。这里有个特殊的地方,就是Count 聚合不仅仅是生成int 类型的,还可以生成long类型。

 

5. ALinq 求和函数的使用

ALinq 求和函数的使用
 1 /// <summary>
 2         /// ALinq 聚合函数的使用
 3         /// </summary>
 4         public void FunctionSum()
 5         {
 6             OA_DBDataContext context = new OA_DBDataContext(new SqlConnection(connectionString));
 7             context.Log = Console.Out;
 8             int total=context.TabMenu.Sum(c=>c.ParentID);
 9             Console.WriteLine("总和:  ==>  "+total);
10             total = context.TabMenu.Select(c => c.ParentID).Sum();
11             Console.WriteLine("总和:  ==>  " + total);
12             Console.WriteLine("\n");
13         }

 

求和函数和上面的使用方式基本相同,也就是查询求出某列数据之和,用法也分为两种,可以自身带条件,也可以不带条件。

 

6. ALinq 最值函数的使用

ALinq 最值函数的使用
 1 /// <summary>
 2         /// ALinq 查询最小值
 3         /// </summary>
 4         public void FunctionMin()
 5         {
 6             OA_DBDataContext context = new OA_DBDataContext(new SqlConnection(connectionString));
 7             context.Log = Console.Out;
 8             int minResult = context.TabMenu.Min(c => c.Id);
 9             Console.WriteLine("总和:  ==>  " + minResult);
10             minResult = context.TabMenu.Select(c => c.Id).Min();
11             Console.WriteLine("总和:  ==>  " + minResult);
12             Console.WriteLine("\n");
13         }
14 
15         /// <summary>
16         /// ALinq 查询最大值
17         /// </summary>
18         public void FunctionMax()
19         {
20             OA_DBDataContext context = new OA_DBDataContext(new SqlConnection(connectionString));
21             context.Log = Console.Out;
22             int minResult = context.TabMenu.Max(c => c.Id);
23             Console.WriteLine("总和:  ==>  " + minResult);
24             minResult = context.TabMenu.Select(c => c.Id).Max();
25             Console.WriteLine("总和:  ==>  " + minResult);
26             Console.WriteLine("\n");
27         }

 

聚合函数其实都是千篇一律,处理的方法都一样,这个就不在多说。

 

7.ALinq 平均数查询

ALinq 平均数查询
 1 /// <summary>
 2         /// ALinq 求平均数
 3         /// </summary>
 4         public void FunctionAverage()
 5         {
 6             OA_DBDataContext context = new OA_DBDataContext(new SqlConnection(connectionString));
 7             context.Log = Console.Out;
 8             double result=context.TabMenu.Average(c=>c.MenuLevel);
 9             Console.WriteLine("平均值:  ==>  "+result);
10             Console.WriteLine("\n");
11         }

 

注意平均数的查询,其实就注意返回值的类型即可。用法和其余的一样 


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