zoukankan      html  css  js  c++  java
  • 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]


  • 相关阅读:
    http://download.microsoft.com/download/A/9/1/A91D6B2BA79847DF9C7EA97854B7DD18/VC.iso
    你的公积金账户在易才,请联系: 地址:武汉市汉口解放大道686号武汉世界贸易大厦49层612 客服电话:85362651 联系人:刘思明
    22
    http://www.cnblogs.com/uniqueliu/archive/2011/08/03/2126545.html
    多层的一个框 架
    MS Jet SQL for Access 2000中级篇
    窗体间传递复杂数据
    小议数据库主键选取策略(转)
    eWebSoft在线编辑器实例说明
    一个程序详细研究DataReader(转)
  • 原文地址:https://www.cnblogs.com/scottckt/p/1928899.html
Copyright © 2011-2022 走看看