ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

第十四节:Lambda、linq、SQL的相爱相杀(3)

2020-02-06 12:43:37  阅读:298  来源: 互联网

标签:Console 相杀 用户 linq 查询 item WriteLine SQL select


一. SQL 开篇

1. where用法

1      #region 封装EF调用SQL语句查询
2         public static List<T> ExecuteQuery<T>(string sql, params SqlParameter[] pars)
3         {
4             return db.Database.SqlQuery<T>(sql, pars).ToList();
5         }
6         #endregion

复制代码

 1        #region 01-where用法
 2             {
 3                 //1. where用法
 4                 //1.1 查询账号为admin的用户信息
 5                 Console.WriteLine("---------------------------- 1. where用法   ----------------------------------------");
 6                 Console.WriteLine("---------------------------- 1.1 查询账号为admin的用户信息   ----------------------------------------");
 7                 string sql1 = @"select * from Sys_UserInfor where userAccount = 'admin'";
 8                 List<Sys_UserInfor> sUserList1 = ExecuteQuery<Sys_UserInfor>(sql1);
 9                 foreach (var item in sUserList1)
10                 {
11                     Console.WriteLine("用户名:{0},用户账号:{1},用户年龄:{2},用户性别:{3}", item.userName, item.userAccount, item.userAge, item.userSex);
12                 }
13                 //1.2  查询账号为中包含admin且性别为男的用户信息
14                 Console.WriteLine("---------------------------- 1.2  查询账号为中包含admin且性别为男的用户信息   ----------------------------------------");
15                 string sql2 = @"select * from Sys_UserInfor where userAccount like '%admin%' and userSex='男'";
16                 List<Sys_UserInfor> sUserList2 = ExecuteQuery<Sys_UserInfor>(sql2);
17                 foreach (var item in sUserList2)
18                 {
19                     Console.WriteLine("用户名:{0},用户账号:{1},用户年龄:{2},用户性别:{3}", item.userName, item.userAccount, item.userAge, item.userSex);
20                 }
21             }
22             #endregion

复制代码

2. select用法

复制代码

 1   #region 02-select用法
 2             {
 3                 //2. select用法 (SQL语句中,查询部分字段,必须要有个实体接收,不能用var类型接收)
 4                 //2.1 查询账号中包含 admin 的用户的 姓名、年龄和性别 三条信息
 5                 Console.WriteLine("---------------------------- 2. select用法   ----------------------------------------");
 6                 Console.WriteLine("-------------2.1 查询账号中包含 admin 的用户的 姓名、年龄和性别 三条信息 )-------------------------");
 7                 string sql1 = @"select userName,userAge,userSex from Sys_UserInfor where userAccount like '%admin%'";
 8                 List<model1> sUserList1 = ExecuteQuery<model1>(sql1);
 9                 sUserList1.ForEach(u =>
10                 {
11                     Console.WriteLine("用户名:{0},用户年龄:{1},用户性别:{2}", u.userName, u.userAge, u.userSex);
12                 });
13 
14             }
15             #endregion

复制代码

 

3. order by用法

复制代码

 1   #region 03-order by用法
 2             {
 3                 //区分:在Lambda中有 orderby(OrderByDescending、ThenBy、ThenByDescending),但在SQL中 只有order by  asc(默认是升序) 和order by desc
 4                 //需要按照多个条件进行升序或降序,格式为: order by x1, x2 descending,x3(表示先按照x1升序排,x1相同的话,再按照x2降序排,x2相同的话,在按照x3升序排列)
 5                 //3. Order By用法 (单条件升降序、多条件综合排序)
 6                 //3.1 查询delflag 为1 的所有用户信息,按照时间升序排列
 7                 Console.WriteLine("------3. orderby用法  (单条件升降序、多条件综合排序)-------------");
 8                 Console.WriteLine("--------------------- 3.1 查询delflag 为1 的所有用户信息,按照时间升序排列   ------------------------------");
 9 
10                 string sql1 = @"select * from Sys_UserInfor where delFlag =1 order by addTime";
11                 List<Sys_UserInfor> sUserList1 = ExecuteQuery<Sys_UserInfor>(sql1);
12                 foreach (var item in sUserList1)
13                 {
14                     Console.WriteLine("用户名:{0},用户账号:{1},用户年龄:{2},用户性别:{3},创建时间:{4}", item.userName, item.userAccount, item.userAge, item.userSex, item.addTime);
15                 }
16                 //3.2 查询delflag 为1 的所有用户信息,先按照时间升序排列,再按照年龄降序
17                 Console.WriteLine("---------------3.2 查询delflag 为1 的所有用户信息,先按照时间升序排列,再按照年龄降序----------------------");
18                 string sql2 = @"select * from Sys_UserInfor where delFlag =1 order by addTime,userAge desc";
19                 List<Sys_UserInfor> sUserList2 = ExecuteQuery<Sys_UserInfor>(sql2);
20                 foreach (var item in sUserList2)
21                 {
22                     Console.WriteLine("用户名:{0},用户账号:{1},用户年龄:{2},用户性别:{3},创建时间:{4}", item.userName, item.userAccount, item.userAge, item.userSex, item.addTime);
23                 }
24             }
25             #endregion

复制代码

 

4. 多表关联查询

  这里SQL语句里的查询,查询包括内连接和外连接,其中,

  内连接分为:隐式内连接和显示内连接。特点:查询出来的结果是多表交叉共有的。

  外连接分为:左外连接和右外连接.

  左外连接:查询出JOIN左边表的全部数据,JOIN右边的表不匹配的数据用NULL来填充。

  右外连接:查询出JOIN右边表的全部数据,JOIN左边的表不匹配的数据用NULL来填充。

复制代码

 #region 04-多表关联查询
            {

                //4.查询账号中含有admin的所有用户的用户昵称、账号、和登录信息
                //4.1 隐式内连接的写法
                Console.WriteLine("---------------04-多表关联查询--------------------");
                Console.WriteLine("---------------4.1 隐式内连接的写法--------------------");
                string sql1 = @"select a.userName,a.userAccount,b.loginCity,b.loginIp,b.loginTime
                                from Sys_UserInfor a,LoginRecords b
                                where a.id =b.userId and a.userAccount like '%admin%'";
                List<model2> uList1 = ExecuteQuery<model2>(sql1);
                foreach (var item in uList1)
                {
                    Console.WriteLine("姓名:{0},账号:{1},登录城市:{2},登录IP:{3},登录时间:{4}", item.userName, item.userAccount, item.loginCity, item.loginIp, item.loginTime);
                }
                //4.2 隐式外链接
                Console.WriteLine("---------------4.2 隐式外链接 --------------------");
                string sql2 = @"select a.userName,a.userAccount,b.loginCity,b.loginIp,b.loginTime
                                from Sys_UserInfor  a join LoginRecords b on  a.id =b.userId
                                where a.userAccount like '%admin%'";
                List<model2> uList2 = ExecuteQuery<model2>(sql2);
                foreach (var item in uList2)
                {
                    Console.WriteLine("姓名:{0},账号:{1},登录城市:{2},登录IP:{3},登录时间:{4}", item.userName, item.userAccount, item.loginCity, item.loginIp, item.loginTime);
                }
                //4.3 查询所有用户的登录信息(左外连接的方式)
                Console.WriteLine("-----------------------4.3 查询所有用户的登录信息(外连接的方式)----------------------------");
                string sql3 = @"select a.userName,a.userAccount,b.loginCity,b.loginIp,b.loginTime
                                from Sys_UserInfor a left join LoginRecords b on  a.id =b.userId
                                ";
                List<model2> uList3 = ExecuteQuery<model2>(sql3);
                foreach (var item in uList3)
                {
                    Console.WriteLine("姓名:{0},账号:{1},登录城市:{2},登录IP:{3},登录时间:{4}", item.userName, item.userAccount, item.loginCity, item.loginIp, item.loginTime);
                }

            }
            #endregion

复制代码

 

5. group By用法

  group By分组(SQL中的group by分组和linq、lambda完全不同。特别注意:select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中) 常见的聚合函数有:sum avg min max

复制代码

 1   #region 05-group By分组
 2             {
 3                 //5. Group By分组(SQL中的group by分组和linq、lambda完全不同,
 4                 /*特别注意:select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中)
 5                  常见的聚合函数有:sum avg min max
 6                  */
 7 
 8                 //5.1 根据用户的性别进行分类,并且统计不同性别的年龄总和
 9                 Console.WriteLine("-------------------- 5. GroupBy分组------------------------");
10                 Console.WriteLine("-------------------- 5.1 根据用户的性别进行分类,并且统计不同性别的年龄总和------------------------");
11                 string sql1 = @"select userSex,SUM(userAge) as TotalAges
12                                 from Sys_UserInfor
13                                 group by userSex";
14                 List<model3> sUserListGroup1 = ExecuteQuery<model3>(sql1);
15                 foreach (var item in sUserListGroup1)
16                 {
17                       Console.WriteLine("性别:{0},年龄总和:{1}", item.userSex, item.TotalAges);
18                 }
19                  
20                 //5.2 根据用户性别进行分类,并且统计不同性别年龄的最大值
21                 Console.WriteLine("-------------5.2 根据用户性别进行分类,并且统计不同性别年龄的最大值-------------------");
22                 string sql2 = @"select userSex,MAX(userAge) as TotalAges
23                                 from Sys_UserInfor
24                                 group by userSex";
25                 List<model3> sUserListGroup2 = ExecuteQuery<model3>(sql2);
26                 foreach (var item in sUserListGroup2)
27                 {
28                     Console.WriteLine("性别:{0},年龄最大值:{1}", item.userSex, item.TotalAges);
29                 }
30             }
31             #endregion

复制代码

 

6. 分页用法

 

sinolover 发布了512 篇原创文章 · 获赞 52 · 访问量 7万+ 私信 关注

标签:Console,相杀,用户,linq,查询,item,WriteLine,SQL,select
来源: https://blog.csdn.net/sinolover/article/details/104159359

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有