EntityFramework 使用Linq处理内连接(inner join)、外链接(left/right outer join)、多表查询
2016-12-08 18:07
711 查看
场景:在实际的项目中使用EntityFramework都会遇到使用Ef处理连接查询的问题,这里做一些小例子如何通过Linq语法处理内连接(inner join)、外连接(left/right outer join);
废话不多说先看实体类:
1.内连接:
Linq:
sql:
2.外连接(这里只介绍左外连接)
Linq:
sql:
3.多表混合
linq:
sql:
场景:在实际的项目中使用EntityFramework都会遇到使用Ef处理连接查询的问题,这里做一些小例子如何通过Linq语法处理内连接(inner join)、外连接(left/right outer join);
废话不多说先看实体类:
1.内连接:
Linq:
var query = from st in context.SchoolBoys join gl in context.SchoolGirls on st.GirlfriendId equals gl.Id select new { Id = st.Id, Name = st.Name, GirlfriendName = gl.Name };
sql:
SELECT 1 AS [C1], [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name], [Extent2].[Name] AS [Name1] FROM [dbo].[SchoolBoys] AS [Extent1] INNER JOIN [dbo].[SchoolGirls] AS [Extent2] ON [Extent1].[GirlfriendId] = [Extent2].[Id]
2.外连接(这里只介绍左外连接)
Linq:
var query = from st in context.SchoolBoys join cl in context.Classes on st.ClassId equals cl.Id into cls from c in cls.DefaultIfEmpty() select new { Id = st.Id, Name = st.Name, ClassName = c.Name };
sql:
SELECT 1 AS [C1], [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name], [Extent2].[Name] AS [Name1] FROM [dbo].[SchoolBoys] AS [Extent1] LEFT OUTER JOIN [dbo].[Classes] AS [Extent2] ON [Extent1].[ClassId] = [Extent2].[Id]
3.多表混合
linq:
var query3 = from st in context.SchoolBoys join gl in context.SchoolGirls on st.GirlfriendId equals gl.Id into sgs from sg in sgs join cl in context.Classes on sg.ClassId equals cl.Id into cls from cla in cls.DefaultIfEmpty() join g in context.Grades on cla.GradeId equals g.Id into gs from gr in gs.DefaultIfEmpty() select new { Id = st.Id, Name = st.Name, ClassName = cla.Name, GradeName = gr.Name };
sql:
SELECT 1 AS [C1], [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name], [Extent3].[Name] AS [Name1], [Extent4].[Name] AS [Name2] FROM [dbo].[SchoolBoys] AS [Extent1] INNER JOIN [dbo].[SchoolGirls] AS [Extent2] ON [Extent1].[GirlfriendId] = [Extent2].[Id] LEFT OUTER JOIN [dbo].[Classes] AS [Extent3] ON [Extent2].[ClassId] = [Extent3].[Id] LEFT OUTER JOIN [dbo].[Grades] AS [Extent4] ON [Extent3].[GradeId] = [Extent4].[Id]
相关文章推荐
- EntityFramework 使用Linq处理内连接(inner join)、外链接(left/right outer join)、多表查询
- Linq表连接大全(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)
- Linq表连接大全(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)
- Linq表连接大全(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)
- Linq表连接大全(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)
- SQL中的left outer join,inner join,right outer join用法 (左右内连接)
- hibernate中HQL查询补充(联合查询,inner join,left outer join,子查询的使用)
- 关于sql server中的 jion,inner join, left join ,left outer join, right join,right outer join 的几点使用心得
- 区别交叉连接(cross jon) 内连接(inner join) 和外连接(left outer join,right outer join)
- Linq语句实现(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)
- SQL中的left outer join,inner join,right outer join各种连接用法
- 内连接<inner join>,左外连接<left outer join>,右外连接<right outer join>
- sql中left join(left outer join)、inner join的使用,right join(right outer join)的用法和left join的相反就可以了。
- 关于表连接(join(inner join),left join(left outer join))
- sql 左连接和右连接的使用技巧(left join and right join)
- SQL中的left outer join,inner join,right outer join用法
- inner join, left outer join, right outer join
- SQL中的left outer join,inner join,right outer join用法详解
- mysql多表连接查询inner/left/right/full/cross join
- sql 左连接和右连接的使用技巧(left join and right join)