zoukankan      html  css  js  c++  java
  • ALinq 入门学习(四)查询关键字

    在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         }

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

  • 相关阅读:
    修改maven远程仓库为阿里的maven仓库(复制)
    Vue下iframe如何实现和父窗口的通信
    Vue在子组件内如何触发父组件的方法
    PhpStorm环境设置Debug
    史上最全的Excel数据编辑处理技巧(转)
    按钮样式
    字符和数字对齐的字体
    使用jquery控制只能输入数字,并且关闭输入法(转)
    Javascript中字符串转换成Date的方法
    MongoDB工具MagicMongoDBTool
  • 原文地址:https://www.cnblogs.com/qingyuan/p/1728276.html
Copyright © 2011-2022 走看看