Linq多表连接查询

在 LINQ 中,join 子句可以实现 3 种类型的联接分别是内部联接、分组联接和左外部联接。

1、内部连接(相对于sql:join | inner join)

格式:join element in dataSource on exp1 equals exp2

int[] intAry1 = {5, 15, 20, 30, 33, 40};//创建整数数组 intAry1 作为数据源
int[] intAry2 = {10, 20, 30, 35, 60, 70, 80};//创建整数数组 intAry2 作为数据源
//查询 query1 使用 join 子句从两个数据源获取数据
//演示内部联接的使用
var query1 =
from a in intAry1
join b in intAry2 on a equals b
select new { VAL1 = a, VAL2 = b };

2、分组连接

格式: join element in dataSource on exp1 equals exp2 into TempData

其中,into 关键字表示将这些数据分组并保存到 TempData中,TempData是保存一组数据的集合。(感觉和sql不同,sql查询的结果是平面矩形的,而linq则是平面树形的,意思是像对象的元素也是个对象)

int[] intAry1 = {5, 15, 20, 30, 33, 40};//创建整数数组 intAry1 作为数据源
int[] intAry2 = {10, 20, 30, 35, 60, 70, 80};//创建整数数组 intAry2 作为数据源
//查询 query1 使用 join 子句从两个数据源获取数据
//演示分组联接的使用
var query1 =
from a in intAry1
join b in intAry2 on a equals b 15 into tempData
select new { A= a, B= tempData};

3、左外部联接 (相对于sql:left join | left outer join)

第三种联接是左外部联接,它返回第一个集合中的所有元素,无论它是否在第二个集合中有相关元素。在 LINQ 中,通过对分组联接的结果调用 DefaultIfEmpty()方法来执行左外部联接。DefaultIfEmpty()方法从列表中获取指定元素。如果列表为空,则返回默认值。

int[] intAry1 = {5, 15, 20, 30, 33, 40};//创建整数数组 intAry1 作为数据源
int[] intAry2 = {10, 20, 30, 35, 60, 70, 80};//创建整数数组 intAry2 作为数据源
//查询 query1 使用 join 子句从两个数据源获取数据
//演示左联接的使用
var query1 =
from a in intAry1
join b in intAry2 on a equals b into TempData
from c in TempData.DefaultIfEmpty()
select new { A = a, B = c };
阅读更多
文章标签: Linq
个人分类: c#
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭