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();  //该方法返回值是随便写的,因为不需要
        }
    }
}

 补充,如果只是单纯的筛选列表中的数据,可以直接用如下方式

List<PrizeRecords> results = (from n in result
                                          where n.UserId.Equals(userId)
                                          select n).ToList();

//重点是如下:感受一下
            IEnumerable<PrizeRecords> resultss=results.Where<PrizeRecords>(_ => _.UserId.Equals(userId));

List<int?> userIdList = db.Taskrewardrecord.Where(o => o.SiteId == SiteId && o.IsMake == 0).Select(p => p.UserId).Distinct().ToList();

//实际瓜分金额
decimal ActualCarveBonus = Math.Round(ActualBonus / Convert.ToDecimal(ActualLogoCount),2);

//获取配置表
string NowDatrStr = DateTime.UtcNow.AddHours(8).ToString("yyyy-MM-dd HH:mm:ss");// + " 23:59:59";
DateTime nowDate = Convert.ToDateTime(NowDatrStr);

//查询第一条数据
List<Configure> datas = db.Configure.OrderByDescending(t => t.Time).Where(t => t.SiteId == SiteId && t.Status != 1 && t.Status != 3 && t.Status != 4 && t.TriggerTime <= nowDate).ToList();

 

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

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

posted @ 2019-03-26 16:55  锦大大的博客呀!  阅读(397)  评论(0编辑  收藏  举报