zoukankan      html  css  js  c++  java
  • Linq实现t-Sql的各种连接

     在ORM框架大行其道的今天,对于.net行业的人,想要学好EF,那Linq的学习在势在必行啊。今天总结下平时比较常用的表连接的用法。

     Inner Join

         Linq: 

    1   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后,可以加速开发效率,期待那一天早日到来,加油啊!!!

  • 相关阅读:
    卷积神经网路计算公式
    Jupyter Notebook
    vim batch copy -- copy between row1 and row2 to row3
    Intellij 快速复制单行快捷键
    Exception in thread "main" java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
    Mac 下查看隐藏文件
    Mac 连接 mysql
    CC++JavaPython 求字符串长度
    LeetCode-1309 Decrypt String from Alphabet to Integer Mapping
    ❀LeetCode❀-1374. Generate a String With Characters That Have Odd Counts
  • 原文地址:https://www.cnblogs.com/JaggerMan/p/4538008.html
Copyright © 2011-2022 走看看