一. Linq开篇

1.Where用法

  linq中where的用法与SQL中where的用法基本一致。

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

2.Select用法

  与前一个章节lambda中介绍的一样,select可以全部查询或查询部分字段

  查询部分的时候可以使用匿名类或者实体类,使用匿名的时候也可以指定列名。

 1   #region 02-select用法 (匿名类和非匿名类写法)2             {3                 //2. select用法 (匿名类和非匿名类写法)4                 //2.1 查询账号中包含 admin 的用户的 姓名、年龄和性别 三条信息 (匿名类的写法,自动生成匿名类名称)5                 Console.WriteLine("---------------------------- 2. select用法 (匿名类和非匿名类写法)   ----------------------------------------");6                 Console.WriteLine("-------------2.1 查询账号中包含 admin 的用户的 姓名、年龄和性别 三条信息 (匿名类的写法)-------------------------");7                 var sUserList1 = (from u in db.Sys_UserInfor8                                   where u.userAccount.Contains("admin")9                                   select new
10                                   {
11                                       u.userName,
12                                       u.userAge,
13                                       u.userSex
14                                   }).ToList();
15                 sUserList1.ForEach(u =>
16                 {
17                     Console.WriteLine("用户名:{0},用户年龄:{1},用户性别:{2}", u.userName, u.userAge, u.userSex);
18                 });
19                 //2.2 查询账号中包含 admin 的用户的 姓名、年龄和性别 三条信息 (匿名类的写法,指定匿名类名称)
20                 Console.WriteLine("---------2.2 查询账号中包含 admin 的用户的 姓名、年龄和性别 三条信息 (匿名类的写法 指定匿名类名称)--------");
21                 var sUserList2 = (from u in db.Sys_UserInfor
22                                   where u.userAccount.Contains("admin")
23                                   select new
24                                   {
25                                       Name = u.userName,
26                                       Age = u.userAge,
27                                       Sex = u.userSex
28                                   }).ToList();
29                 sUserList2.ForEach(u =>
30                 {
31                     Console.WriteLine("用户名:{0},用户年龄:{1},用户性别:{2}", u.Name, u.Age, u.Sex);
32                 });
33                 //2.3 查询账号中包含 admin 的用户的 姓名、年龄和性别 三条信息 (非匿名类的写法)
34                 Console.WriteLine("-------------2.3 查询账号中包含 admin 的用户的 姓名、年龄和性别 三条信息 (非匿名类的写法)-------------------------");
35                 List<newUserInfor> sUserList3 = (from u in db.Sys_UserInfor
36                                                  where u.userAccount.Contains("admin")
37                                                  select new newUserInfor
38                                                  {
39                                                      newName = u.userName,
40                                                      newAge = u.userAge,
41                                                      newSex = u.userSex
42                                                  }).ToList();
43                 sUserList3.ForEach(u =>
44                 {
45                     Console.WriteLine("用户名:{0},用户年龄:{1},用户性别:{2}", u.newName, u.newAge, u.newSex);
46                 });
47             }
48             #endregion

3.orderby用法

   关键字是:orderby (默认是升序) 和orderby descending

   需要按照多个条件进行升序或降序,格式为:  orderby x1,x2 descending,x3 (表示先按照x1升序排,x1相同的话,再按照x2降序排,x2相同的话,在按照x3升序排列)

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

4.多表关联查询

详解:

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

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

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

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

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

注意:外链接的用法,join时必须将join后的表into到一个新的变量XX中,然后要用XX.DefaultIfEmpty()表示外连接。DefaultIfEmpty使用了泛型中的default关键字。default关键字对于引用类型将返回null,而对于值类型则返回0。对于结构体类型,则会根据其成员类型将它们相应地初始化为null(引用类型)或0(值类型)

  #region 04-多表关联查询{//4.查询账号中含有admin的所有用户的用户昵称、账号、和登录信息//4.1 隐式内连接的写法(匿名类且不指定名称)Console.WriteLine("---------------04-多表关联查询--------------------");Console.WriteLine("---------------4.1 隐式内连接的写法(匿名类且不指定名称)--------------------");var uList1 = (from a in db.Sys_UserInforfrom b in db.LoginRecordswhere a.id == b.userId && a.userAccount.Contains("admin")select new{a.userName,a.userAccount,b.loginCity,b.loginIp,b.loginTime}).ToList();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 隐式外链接(匿名类 且部分列指定名称)  --------------------");var uList2 = (from a in db.Sys_UserInforjoin b in db.LoginRecords on a.id equals b.userIdwhere a.userAccount.Contains("admin")select new{UserName = a.userName,UserAccount = a.userAccount,b.loginCity,b.loginIp,b.loginTime}).ToList();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 查询所有用户的登录信息(左外连接的方式)//join时必须将join后的表into到一个新的变量XX中,然后要用XX.DefaultIfEmpty()表示外连接。//DefaultIfEmpty使用了泛型中的default关键字。default关键字对于引用类型将返回null,而对于值类型则返回0。对于结构体类型,则会根据其成员类型将它们相应地初始化为null(引用类型)或0(值类型)Console.WriteLine("-----------------------4.3 查询所有用户的登录信息(外连接的方式)----------------------------");var uList3 = (from a in db.Sys_UserInforjoin b in db.LoginRecords on a.id equals b.userId into fkfrom c in fk.DefaultIfEmpty()select new{UserName = a.userName,UserAccount = a.userAccount,c.loginCity,c.loginIp,c.loginTime}).ToList();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 into 分组

 1   #region 05-group By分组(匿名类写法)2             {3                 //5. GroupBy分组(需要重点看一下)4                 //5.1 根据用户的性别进行分类,然后将不同性别的用户信息输出来5                 Console.WriteLine("-------------------- 5. GroupBy分组------------------------");6                 Console.WriteLine("-------------------- 5.1 根据用户的性别进行分类,然后将不同性别的用户信息输出来------------------------");7                 var sUserListGroup = (from u in db.Sys_UserInfor8                                       group u by u.userSex into fk9                                       select fk).ToList();
10                 foreach (var group in sUserListGroup)
11                 {
12                     Console.WriteLine("性别为:{0}", group.Key);    //分组依据的字段内容
13                     foreach (var item in group)
14                     {
15                         Console.WriteLine("用户名:{0},用户账号:{1},用户年龄:{2},用户性别:{3}", item.userName, item.userAccount, item.userAge, item.userSex);
16                     }
17                 }
18                 //5.2 根据用户性别进行分类,然后将不同性别的年龄大于等于21岁的用户信息输出来
19                 Console.WriteLine("-------------5.2 根据用户性别进行分类,然后将不同性别的年龄大于等于21岁的用户信息输出来-------------------");
20                 var sUserListGroup2 = (from u in db.Sys_UserInfor
21                                        where u.userAge >= 21
22                                       group u by u.userSex into fk
23                                       select fk).ToList();
24                 foreach (var group in sUserListGroup2)
25                 {
26                     Console.WriteLine("性别为:{0}", group.Key);    //分组依据的字段内容
27                     foreach (var item in group)
28                     {
29                         Console.WriteLine("用户名:{0},用户账号:{1},用户年龄:{2},用户性别:{3}", item.userName, item.userAccount, item.userAge, item.userSex);
30                     }
31                 }
32             }
33             #endregion

6. skip和take用法

 1         #region 06-Skip和Take用法2             {3 4                 //6. Skip和Take 分页用法5                 //skip表示跳过多少条,Take表示取多少条6                 //6.1 根据时间降序排列,取第2和第3条数据(即先排序,然后跨过1条,取2条数据)7                 Console.WriteLine("--------------------6. Skip和Take 分页用法------------------------");8                 Console.WriteLine("---------6.1 根据时间降序排列,取用户信息中的第2和第3条数据(即先排序,然后跨过1条,取2条数据)---------");9                 var sUserList = (from u in db.Sys_UserInfor
10                                  orderby u.addTime descending
11                                  select u).Skip(1).Take(2).ToList();
12                 sUserList.ForEach(u =>
13                 {
14                     Console.WriteLine("用户名:{0},用户年龄:{1},用户性别:{2},创建时间:{3}", u.userName, u.userAge, u.userSex, u.addTime);
15                 });
16             }
17             #endregion        

第十三节:Lambda、linq、SQL的相爱相杀(2)相关推荐

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

    一. SQL 开篇 1. where用法 1 #region 封装EF调用SQL语句查询 2 public static List<T> ExecuteQuery<T>(str ...

  2. 第十二节:Lambda、linq、SQL的相爱相杀(1)

    一. 谈情怀  Lambda.Linq.SQL伴随着我的开发一年又一年,但它们三者并没有此消彼长,各自占有这一定的比重,起着不可替代的作用. 相信我们最先接触的应该就是SQL了,凡是科班出身的人,大学 ...

  3. 阿里云CDN技术掌舵人文景:相爱相杀一路狂奔的这十年

    提到阿里云CDN,不得不提技术掌舵人姚伟斌(文景),虽然他不是团队中最"老"的同学,但他却历经了淘宝业务发展最为飞速的几年,见证了从最初服务淘宝和集团内部的CDN,到如今国内服务客 ...

  4. 支付宝与微信转战刷脸支付,多年相爱相杀情归何处?

    说起阿里巴巴与腾讯,似乎怎么也绕不开马云跟马化腾. 两马同台,自是不同凡响. 有次,两人同台颁奖. 主持人问马云:"你们都信马,你觉得两人之间最显著的区别是什么?" 马云笑答:&q ...

  5. 相爱相杀:移动联通IT支撑回忆录(八)

    相爱相杀:移动联通IT支撑回忆录(八) 文 | 宁宇 我写的不是小说,而是我的印象和记忆中,移动与联通有关IT支撑的历史往事. 在十数年间,双方相互学习.相互借鉴,同时又相互竞争.相互敌视,在不同的阶 ...

  6. 司马懿和诸葛亮之间的相爱相杀

    阅读本文大概需要2分钟 良好的习惯需要不断慢慢培养.我现在基本每天晚上的轨迹是这样的:每天晚上下班后,洗漱完基本就到晚上七点半左右了. 19:30-21:00   看电视剧. 21:00-21:30 ...

  7. 1024:我与CSDN的相爱相杀

    文章目录 一.前言 二.与CSDN的相爱相杀 1.入目无人四下皆是你 2.金风玉露一相逢 3.待得九宵清风起 4.姜花深处无少年 三.总结 一.前言 不知不觉相伴CSDN已经三年有余,这三年时间登陆多 ...

  8. 相爱相杀:移动联通IT支撑回忆录(总结篇)

    相爱相杀:移动联通IT支撑回忆录(总结篇)文 | 宁宇 北京西二环边的联通总部大楼上有几个大字:"创新·改变世界".这是2009年行业重组之后新联通提出的口号,而联通近几年IT支撑 ...

  9. 相爱相杀:移动联通IT支撑回忆录(十三)

    相爱相杀:移动联通IT支撑回忆录(十三)文 | 宁宇 我写的不是小说,而是我的印象和记忆中,移动与联通有关IT支撑的历史往事. 在十数年间,双方相互学习.相互借鉴,同时又相互竞争.相互敌视,在不同的阶 ...

最新文章

  1. macOs下全局安装npm包的设置问题
  2. 敏捷开发框架_他山之石-敏捷开发管理框架在设计项目中的应用
  3. 从Python的turtle绘图开始学习图形化程序设计
  4. 登录判断_Spring Security之多次登录失败后账户锁定功能的实现
  5. rails3异步发邮件
  6. js创建对象之原型模式2原型与in操作符
  7. pytorch线性回归(笔记一)
  8. sqlparameter多个赋值一行完成_HashMap源码从面试题说起:请一行一行代码描述hashmap put方法...
  9. gradle生成java文件_使用Gradle for Java插件生成Java类
  10. 智驾科技MAXIEYE完成3亿元B轮融资,暂未取得品牌同名商标
  11. 代码审计之JAVA代码审计洞态IAST系统以及SecExample靶场
  12. 论文参考文献格式与设置
  13. html设置模块居中,DW怎么设置DIV模块在页面中居中?
  14. 为什么需要Code Review?
  15. 阿里云账号个人实名认证教程
  16. Descending Order 实践练习
  17. Linux查看CPU和内存使用情况
  18. Java基础学习:尚硅谷项目三 开发团队调度软件
  19. 《Flutter 控件大全》第十个:AnimatedIcon
  20. Macbook如何打开Chrome调试工具Developer Tools

热门文章

  1. android与php使用base64加密的字符串结果不一样解决方法
  2. java-上传文件与现实上传文件
  3. BZOJ 2242: [SDOI2011]计算器 [快速幂 BSGS]
  4. 06-CABasicAnimation基础核心动画
  5. Web请求中同步与异步的区别
  6. 【转载】C++读写ini配置文件GetPrivateProfileString()WritePrivateProfileString()
  7. Oralce 9.2.0.6 到 9.2.0.8 升级 小结
  8. [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]
  9. [Leedcode][JAVA][第876题][快慢指针]
  10. pythonxml模块高级用法_Python利用ElementTree模块处理XML的方法详解