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