我们一开始接触ASP.NET.MVC的时候,linq查询是最普遍的。当我们知道某些数据的时候,我们直接考虑的就是linq查询语句,然而它的语句代码如下:
var q=from p in Models.表名
join a in Modes.表名 on p.某个字段 equals a. 某个字段
select p;
下面我讲一下我在项目中遇到的问题是,我们在查询数据时,需要查询出它的上级聚类包,那么这个时候我们必先考虑用linq查询来做,这样我用linq查询并不能查询出我想要的数据,所以我在linq查询中嵌套子查询。我的数据库里面有一个上级ID,所以我根据它的上级ID来进行判断它是否拥有上级聚类包,它的上级为0的时候,那么我们就知道它则是最大的,没有上级关系的,下面我们来进行表格的初始化,如下图:
为了实现把我的上级聚类包查询出来,我们在控制器里用linq查询语句中进行嵌套,这样就能把我们的上级聚类包查询出来了。我的思路就是需要让它的上级ID等于我这张表的主键ID,这样我们才能拿到相对应的上、下级聚类包数据,然后我再查询出我上级ID对应的主键ID中的数据,这样我们就能查询出来了,那么首先我们需要创建一个实体类ClusterPackVo来接收我需要连接表里面的数据,然后我们进行赋值的同时,我们需要把它的上级ID也查询出来。下面让大家来看一下我的代码:
接下来,我们来进行子查询的嵌套,其实很简单就是在子查询中再查询出我的主表,然后通过条件来进行筛选,然后把表的聚类包名称给查询出来,接着让它返回序列中的第一个元素,如果序列中不包含如何元素,则返回默认值。代码如下:
这样代码就完成了,接下来让大家看一下效果图: