开发工具与关键技术:VS
作者: 李伙
撰写时间: 2019年3月30日
在学习MVC中,查询数据是一个基础的操作,linq查询无疑是查询数据的方法之一。linq查询与数据库中的查询有点类似,但也有很大的不同。linq查询也有几种不同的写法,如下:
var 自定义名称=(from 自定义的表名 in Model对象.查询的表
【where 自定义的表名.字段1 关系运算符 值 【&& 自定义的表名.字段2 关系运算符 值】】
【orderby 自定义的表名.字段】
第一种写法:【select 自定义的表名】
第二种写法:【select new {自定义的表名.字段1,
自定义的表名.字段2,
自定义的表名.字段3,
....
}】
第三种写法:【select new 类名{ 类的属性1=自定义的表名.字段1,
类的属性2=自定义的表名.字段2,
....
}】
).Single();//查询单条数据,当没有数据或者有多条数据时会触发异常
.ToList();//查询多条数据并转为List
.Count();//查询有多少条数据
图中可以看出:linq查询不同的写法只是在select后面的写法不同,第一种写法一般用在单表查询中,第二、三种写法一般用在多表查询中。
图中var是匿名数据类型 一般在linq中使用,编译时会自动转化成具体的数据类型。如果已知变量是什么数据类型可以用具体的数据类型。
图中 where为条件查询,关系运算符为“==”,orderby:根据自定义的表名.字段来进行排序,也可以在“orderby 自定义的表名.字段”后面加上“descending”意思是按照字段进行倒序的排序,即从大到小,很多时候我们可以利用“descending”进行倒序的排序,比如查询学生的最高成绩,就可以用“descending”来从大到小排序查询出最高成绩。Single()的结果只能有一条数据,0条或者大于等于2条都会出现异常,所以一般需要用“try{}catch(Exception){}”来捕获异常。ToList():查询多条数据并转为List。Count():查询有多少条数据,即数据的总条数。
单表查询的代码如下:
如图所示: Linq使用group by分组按UserID用户ID查询出用户最高的成绩信息
group by分组语法:group tbAchievement by tbAchievement.UserID into tbStudent
表示对tbAchievement按UserID字段进行分组,其结果命名为tbStudent
一旦重新命名,tbAchievement的作用域就结束了,所以,最后select时,只能select tbStudent
group by是自定义的表名按照自定义的表名的字段来进行分组。
linq查询可用在单表查询中,也可用在多表查询中。而在多表联表查询中,都会用到“join in”来进行表与表之间的连接,而表与表之间的连接都会根据表与表之间的主键和外键的关系来进行连接。如下:
如图所示:查询轮播数据是根据自定义公告表的公告ID与自定义公告轮播表的公告ID进行多表联表查询来查询出自己所需要的数据。