当前位置:Gxlcms > 数据库问题 > Linq实现t-Sql的各种连接

Linq实现t-Sql的各种连接

时间:2021-07-01 10:21:17 帮助过:5人阅读

var list = (from c in customerDb.Order 2 join o in customerDb.OrderItem on c.OrderId equals o.OrderItemId 3 select new { c = c.OrderId }).FirstOrDefault();

      生成的Sql

1 SELECT TOP (1) 
2 [Extent1].[OrderId] AS [OrderId]
3 FROM  [dbo].[Orders] AS [Extent1]
4 INNER JOIN [dbo].[OrderItems] AS [Extent2] ON [Extent1].[OrderId] = [Extent2].[OrderItemId]

 

Left Join

      Linq:

1      var list = (from c in customerDb.Order
2                             join o in customerDb.OrderItem on c.OrderId equals o.OrderItemId
3                             into Grp
4                             from grp in Grp.DefaultIfEmpty()
5                             select new { c = c.OrderId, grp = grp.OrderItemId }).FirstOrDefault();

      生成的Sql:

1 SELECT TOP (1) 
2 [Extent1].[OrderId] AS [OrderId], 
3 [Extent2].[OrderItemId] AS [OrderItemId]
4 FROM  [dbo].[Orders] AS [Extent1]
5 LEFT OUTER JOIN [dbo].[OrderItems] AS [Extent2] ON [Extent1].[OrderId] = [Extent2].[OrderItemId]

 Cross Join

        Linq:   

1     var list = (from c in customerDb.Order
2                             from o in customerDb.OrderItem 
3                             select new { c = c.OrderId,o=o.OrderItemId }).FirstOrDefault();

        生成的Sql:

1 SELECT TOP (1) 
2 [Extent1].[OrderId] AS [OrderId], 
3 [Extent2].[OrderItemId] AS [OrderItemId]
4 FROM  [dbo].[Orders] AS [Extent1]
5 CROSS JOIN [dbo].[OrderItems] AS [Extent2]

  总结:右连接其实就是换下两个表的顺序位置,

          全连接就是把左外连接的结果拼接起来去重就行。

          用顺ef后,可以加速开发效率,期待那一天早日到来,加油啊!!!

Linq实现t-Sql的各种连接

标签:

人气教程排行