• Linq 中Left join与 Group by一起使用


     直接看SQL语句:

     public IList<StructureRootDTO> GetRootStructureInfos()
            {
                
    using (ETCDataContext etcDataContext = this.EtcDataContext)
                {
                    var query 
    =
                           from item 
    in
                               (
                                   from parent 
    in etcDataContext.SYS_Structures
                                   
    where parent.ParentNode == "root"
                                   join child 
    in etcDataContext.SYS_Structures
                                   on parent.Name equals child.ParentNode into childAll
                                   from childItem 
    in childAll.DefaultIfEmpty()
                                   select 
    new
                                   {
                                       parent.ID,
                                       parent.Name,
                                       childItem.ParentNode
                                   }
                               )
                           group item by item.Name into groupChild                      
                           select 
    new StructureRootDTO
                           {
                               ID 
    = groupChild.Max(o => o.ID),
                               Name 
    = groupChild.Max(o => o.Name),
                               ChildParentNodeName 
    = groupChild.Max(o => o.ParentNode)
                           };
                    
    return query.OrderBy(o => o.ID).ToList();
                }
            }

    生成query的SQL为:

    SELECT MAX([t2].[ID]AS [ID]MAX([t2].[Name]AS [Name]MAX([t2].[value]AS [ChildParentNodeName]
    FROM (
        
    SELECT [t0].[ID][t0].[Name][t1].[ParentNode] AS [value][t0].[ParentNode]
        
    FROM [dbo].[SYS_Structure] AS [t0]
        
    LEFT OUTER JOIN [dbo].[SYS_Structure] AS [t1] ON [t0].[Name] = [t1].[ParentNode]
        ) 
    AS [t2]
    WHERE [t2].[ParentNode] = 'root'
    GROUP BY [t2].[Name]


  • 相关阅读:
    Clickhouse SQL语法
    Clickhouse副本及分片
    Clickhouse入门及实践
    Flink CDC 与Hudi整合
    分布式相关理论及算法
    ClickHouse查询优化
    ios之OC与C、OC与c++互相调用OC与C++的互相调用
    前端 base64加密 及 md5加密
    CSS实现文字对齐效果总结
    十分钟学会Centos7下无图形界面安装 Oracle11g
  • 原文地址:https://www.cnblogs.com/scottckt/p/1928899.html
Copyright © 2020-2023  润新知