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

  • 相关阅读:
    Fancybox丰富的弹出层效果
    oracle wm_concat(column)函数的使用
    asp.net下ajax.ajaxMethod使用方法
    sql2008 附加数据库出错解决方法
    关于mysql-5.7.13-winx64服务无法启动的解决方法
    解决懒加载异常
    学生各科成绩,平均分,总分的展示
    docker desktop v20 设置文件路径,windows docker 设置设置路径
    自动化运维工具:jumpserver/jms_all
    linux kill 进程正则表达式
  • 原文地址:https://www.cnblogs.com/wangjinya/p/10601279.html
Copyright © 2011-2022 走看看