初学Linq,找人帮忙^_^!
    /*
    * 场景:有一Panel控件,这个控件中嵌套了一个或多个TabControl控件,TabControl控件有
    * 一个或多个TabPage,最多3层嵌套TabPage.Parent -> TabControl, TabControl.Parent->Panel
    * Panel中还有一些其它控件不过这些控件都不会再有子控件
    * 
    * 需求:从这个Panel控件中找出它的子控件,这些子控件不能再有子控件,如果这个子控件是
    * TabControl找出这个TabControl中所有TabPage中的子控件(也就是Panel的重孙控件)
    * 
    * 要求:一句Linq搞定
    */

解决方案 »

  1.   

    沙发 我自个写的
            var query = from c in this.Control.Controls.Cast<Control>()
                            let ctrls1 = c.Controls.Cast<Control>()
                            from c1 in ctrls1
                            let ctrls2 = c1.Controls.Cast<Conltrol>()
                            where !c.HasChildren && !(c is UCode)
                            from c2 in ctrls2
    但是最后的select不知道怎么把 c 和 c2 连接起来了
    对了 再加个要求Linq返回的序列必须是 IEnumrable<Control>
      

  2.   


                var controls = (from Control c in panel1.Controls
                                where !c.HasChildren
                                select c).Union(from Control tc in panel1.Controls
                                                let tabPages = tc.Controls.Cast<Control>()
                                                from Control tp in tabPages
                                                let tps = tp.Controls.Cast<Control>()
                                                from tpCtrl in tps
                                                where tc is TabControl
                                                select tpCtrl);
      

  3.   

    其实我的初衷是不想遍历 panel.Controls两次
    难道一次遍历搞不定了吗
      

  4.   


    var controls = (from Control c in panel1.Controls
                                where !c.HasChildren
                                select c).Union(from Control tc in panel1.Controls
                                                let tabPages = tc.Controls.Cast<Control>()
                                                from Control tp in tabPages
                                                let tps = tp.Controls.Cast<Control>()
                                                from tpCtrl in tps
                                                where tc is TabControl
                                                select tpCtrl);
    借用。