在SQL查询中对应着各种各样的查询关键字,如果distinct,count,sum 等等一些关键字。在Linq to SQL 中对这些关键字的使用做了封装,同样在ALinq 中也有相同的操作函数。
1. ALinq 过滤查询重复数据 Distinct
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 中匿名对象查询
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 查询调用本地方法
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
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 求和函数的使用
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 最值函数的使用
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 平均数查询
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 }
注意平均数的查询,其实就注意返回值的类型即可。用法和其余的一样