说起Linq,对我来说这可能是最熟悉的C#方法了,它是MVC控制器中自带的也是最常用的数据查询方法,查询数据的写法和SQL数据库的写法类似,使用起来也不算太复杂。
第一次接触Linq方法的时候是在制作项目的登录页面部分时,要设法将用户输入的账户密码提取出来,然后拿去和数据库内的用户表进行匹配,匹配成功则当前账户登录成功。到了这时候,就要用Linq来查询用户表中的数据了。如图,查询用户表数据:
Linq有四种结尾值(点号后),需要根据自身所查询数据的实际情况来决定使用哪种结尾值。Single();查询单条数据,当在查询数据时结果为无数据或查询出多条数据时会触发异常,一般使用前加上try() catch()组合来预防异常。ToList();查询多条数据并转换成列表数据。ToArray();查询多条数据并转为数组。Count();查询一共有多少条数据。
Linq中除了单表查询还可以多表查询数据,通过表与表之间主键&外键的联系,用join连接各个表查询出所需要的数据。如图,联表查询用户&用户类型&类型明细数据,用于判断当前登录的账号是否符合用户所选择的用户类型:
介绍完最基本的两种Linq查询写法后,轮到了本文的重头戏:二次嵌套查询。简单的说就是在一次查询中嵌套着另一次的子查询,理论上来说还可以继续嵌套,继续查询,但对于逻辑思维的要求也就更高,对我来说,二次子查询已经是较复杂的新知识。当第一张表中包含着第二张表的数据,第二张表中又连接着第三张表的数据,但第三张表却又和第一张表毫无主外键联系,这时该怎么查呢?遇到这种情况,一般的Linq查询已经无法达成要求了。此时就要改变写法,双Linq查询获取数据。
首先我们需要创建几个实体类Vo用于存放这三张表的数据,并以列表的形