先讲一下简单的单表查询,通常我们在做页面的时候都要通过查询数据库去获得数据,在一张表里面就有我需要的数据,所以我们就查询一张表就可以了。查询条件where可以是一条数据或者多条数据,也可以全部查询出来。不写条件where就是查询一张表的所有数据。
我再给大家看一下查询一条数据的截图,查询一条数据后面加个single,single返回序列唯一的元素,如果该序列并非恰好包含一个元素,则会触发异常。single是单个的意思,但是当查出来的数据为0条或者为1条以上,就会报异常,但是如果直接就是这些写,出了错很难找到出错点,所以我们查询一条数据的时候就会使用try,catch来捕获异常。最后return返回查询的数据。
然后肯定有人有疑问了,为什么同样是单表查询,写法却不一样。我所知道的linq对于表查询有3种。
一、select 自定义的表,一般为单表查询使用
二、select new 类名 -------- 一般为多表查询使用
{
类的属性1=自定义的表名.字段1,
类的属性2=自定义的表名.字段2 }
大家可以看到下面我有两个作为参照的写法,它们是等价的。然后上面的就和下面第二个写法一样,这样看的话会比较清楚一点。相当于new了一个表出来,然后放数据进去。
三、select new -------- 一般为多表查询使用,单表也可使用
{
自定义的表名.字段1,
自定义的表名.字段2,
自定义的表名.字段3 }
New一个空对象列表,var匿名数据类型会按照后面所查询的数据进行转换。
.Single() 查询单条数据,当查询出来是0条或者是2条及以上的数据时就会触发异常。
.Tolist() 查询多条数据并转换为List。
.Count() 查询多少条数据。
然后我们来看一下联表查询,在查询之前,我们应该看一下数据库,我们需要查的表之间有没有关联,如果没有关联是无法进行连接的。所以from自定义的一个表名,也相对于继承的意思,join连接下一个自定义的表,in Model对象.查询的表,on 表相同的字段,equals两个表相同的字段进行连接。主键连外键,外键连主键都是可以的。
进行分页一定要使用orderby,Orderby按照自定义表里面的字段进行升序或者倒序的排序,
ascending根据键按升序对序列的元素进行排序,当然有升序也会有降序descending。但是我更推荐降序descending,降序排序更方便我们查询新增的学生信息。
来看一个例子,可以看见这样写是没有报错的,但是这样写真的对吗,在页面中执行弹出一个错误的提示框。为什么不对?它在linq写法中会报错的,因为查单表的时候,原本查PW_File中的tbFile,又重新new了一个PW_File,所以就会转换失败。所以只能select tbFile。
在联表查询的时候就一定要new一个表。为什么呢?我们在进行多个表进行联表查询的时候,查询出来的数据最后要放到一个表里面才行,所以一定要写一个new Vo新的表来进行接收数据。