zoukankan      html  css  js  c++  java
  • LINQ(一)

    一、linq的基本介绍

    1.  linq的作用:LINQ是专门对数据进行操作的语句,可以对SQL,xml,dataset,object类型的数据进行分析处理。

     2. linq的组成,分为、(1). 数据源、(2). linq语句、(3) linq对象的引用其中linq语句的执行过程和SQL语句的执行过程相似,SQL语句编译时的执行过程是:【from 表名,where 条件,select  *以下是linq的简单代码示例

    3. linq语句语法解析。

    from num in numbers 
    where (num % 2) == 0
    select num;
    以上两句的语法等同于sql的查询语句的执行顺序,1. from 表名 2.where 条件 3. select 查询字段。
     1 private static void test() 
     2 { 
     3   //1. data source 数据源
     4   int[] numbers = { 0, 1, 2, 3, 4, 5, 6 };
     5   //2. 创建一个query语句,该语句目前还没有被引用执行,只有在引用的时候才会被执行
     6   var numQuery = from num in numbers
     7   where (num % 2) == 0
     8   select num;
     9   //3. query的执行
    10   foreach (var num in numQuery)
    11     {
    12       Console.Write("{0},", num);
    13     }
    14 }

    3. linq语句在执行到以上代码第2段【linq语句】的时候还并没有开始执行,只有执行到第三阶段的时候才会被执行,那么如果想要在第二阶段开始就想要执行,就需要加上以下代码:

     1 private static void test() 
     2         {   
     3             //1. data source  数据源
     4             int[] numbers = { 0, 1, 2, 3, 4, 5, 6 };
     5             //2. 创建一个query语句,该语句目前还没有被引用执行,只有在引用的时候才会被执行
     6             var numQuery = from num in numbers
     7                            where (num % 2) == 0
     8                            select num;
     9             //2.1 如果想强制现在就执行,则可以使用以下方法。
    10             int queryCount = numQuery.Count();//获取执行以后的结果数
    11             numQuery.ToList();   //转换成list
    12             numQuery.ToArray();  //转换为array
    13             //3. query的执行
    14             foreach (var num in numQuery)
    15             {
    16                 Console.Write("{0},", num);
    17             }
    18 
    19         }

    4. linq的几种基本操作,其中包括,降序(descending)、升序( ascending)、分组(group by)、内连接(join)、数据打包(into)

     a. 降序与升序,直接看代码:

     1 private static void QueryOperations()
     2         {
     3             int[] numbers = { 0, 1, 2, 3, 4, 5, 6 , 7 };
     4             var query = from num in numbers
     5                         where num % 2 == 1 || num % 3 == 1
     6                         orderby num ascending //descending  降序,ascending 升序
     7                         select num;
     8             foreach (var num in query)
     9             {
    10                 Console.Write("{0}", num);
    11             }
    12         }

     b. 对list集合进行升序降序排序,其中的Userinfo指的是数据源,int指的是对哪一种数据类型进行排序。

        //升序排序
          //var userInfoList = db.UserInfo.Where<UserInfo>(U => true).OrderBy<UserInfo, int>(u => u.ID);
          //降序排序
          //var userInfoList = db.UserInfo.Where<UserInfo>(U => true).OrderByDescending(u => u.ID);

    c. linq实现分页查询

    1        int pageIndex = 2;
    2             int pageSize = 2;
    3             var userInfoList = (from u in db.UserInfo
    4                                 where u.ID > 0
    5                                 orderby u.RegTime ascending, u.ID descending
    6                                 select u).Skip<UserInfo>((pageIndex - 1) * pageSize).Take<UserInfo>(pageSize);  //Skip:表示跳过多少条记录, Take取多少条记录

     d. 取出list中其中几列的数据

    1  var userInfoList = from u in db.UserInfo
    2                                where u.ID == 343
    3                                select  new{UName=u.UserName,UPwd=u.UserPass};   //新建一个匿名类

    e .内连接,左连接,右连接

    左连接:
    var LeftJoin = from emp in ListOfEmployees
    join dept in ListOfDepartment
    on emp.DeptID equals dept.ID into JoinedEmpDept
    from dept in JoinedEmpDept.DefaultIfEmpty()
    select new                        
    {
    EmployeeName = emp.Name,
    DepartmentName = dept != null ? dept.Name : null                        
    };
     
    右连接:
    var RightJoin = from dept in ListOfDepartment
    join employee in ListOfEmployees
    on dept.ID equals employee.DeptID into joinDeptEmp
    from employee in joinDeptEmp.DefaultIfEmpty()
    select new                          
    {
    EmployeeName = employee != null ? employee.Name : null,
    DepartmentName = dept.Name
    };
     
    内连接:
     var query = from t in entitiy.TB_GCGL_ADA_USER
                     join p in entitiy.TB_GCGL_ZY_ZYK
                     on t.ETPRS_CODE equals p.ETPRS_CODE
                     select new TB_USER_ZYK
                     {
                        USER_ID = t.USER_ID,
                        USER_NAME = t.USER_NAME,
                        USER_PASSWORD = t.USER_PASSWORD,
                     };

    f . 通过匿名来根据其中的一列查询表中的数据。其中的第一个u指userinfo。

    1 wangjin2Entities1 db = new wangjin2Entities1();
    2 var userinfolist=db.Userinfo.where<Userinfo>(u=>u.ID=3)

    g. 联合查询

     var res = from m in masterList
                          from k in kongfuList
                          where m.Kongfu == k.Name && k.Power > 90
                          //select new {master = m, kongfu = k};
                          select m;

    查询不包含列表中的数据

     int[] num0 = { 28, 32, 14 };
                int[] num1 = { 14, 15, 16 };
    
                var bb = from n1 in num0
                         where num1.Contains(n1) == false
                         select n1;
                //bb.ToList();
                foreach (var i in bb)
                {
                    Console.WriteLine(i);
                }

     ArrayList去重,注意:list的去重方式不能用在ArrayList中,至于为什么,我也不知道,然后我研究了一下,自己写一个去重的方法,没办法,我就是这样优秀

    ArrayList num0 = new ArrayList();
                num0.Add(234);
                num0.Add(23);
                num0.Add(24);
                num0.Add(1234);
                
                ArrayList num1 = new ArrayList();
                num1.Add(234);
                num1.Add(53);
                num1.Add(56);
                num1.Add(67);
                foreach (object i in num0)
                {
                    Console.WriteLine(i);
                    if (num1.Contains(i))
                    {
                        Console.WriteLine("包含");
                    }
                }流程信息部

     发现一个简单的过滤的方法:该方法就是指根据id过滤其中不要的数据

    var loginUserAllowActions = loginUserMenuActions.Where(a => !forbidActions.Contains(a.ID));

    去除列表中重复的值:此处需要提供一个方法

    将总的集合中的重复权限清除。
                var lastLoginUserActions = loginUserAllowActions.Distinct(new EqualityComparer());
    namespace Model
    {
        public class EqualityComparer:IEqualityComparer<ActionInfo>
        {
            public bool Equals(ActionInfo x, ActionInfo y)   //该方法是主要的方法
            {
                return x.ID == y.ID;
            }
    
            public int GetHashCode(ActionInfo obj)
            {
                return obj.GetHashCode();  //该方法返回值是随便写的,因为不需要
            }
        }
    }

    哪里不懂的,可以关注,留言,我会尽快回复。

    欢迎访问: https://www.cnblogs.com/wangjinya

  • 相关阅读:
    Linux 学习 step by step (1)
    ubuntu server nginx 安装与配置
    ubuntu server samba服务器配置
    iOS app集成支付宝支付流程及后台php订单签名处理
    mac 连接windows 共享内容
    linux 文件查找,which,whereis,locate,find
    ubuntu server vsftpd 虚拟用户及目录
    ubuntu server 安装 mantis bug tracker 中文配置
    ubuntu server vsftpd 匿名用户上传下载及目录设置
    linux 用户管理,用户权限管理,用户组管理
  • 原文地址:https://www.cnblogs.com/wangjinya/p/10601279.html
Copyright © 2011-2022 走看看