Phi*_*fin 35 asp.net linq-to-objects .net-3.5 c#-3.0
如果我想在ASP.NET页面上找到选中的复选框,我可以使用以下LINQ查询.
var checkBoxes = this.Controls
.OfType<CheckBox>()
.TakeWhile<CheckBox>(cb => cb.Checked);
Run Code Online (Sandbox Code Playgroud)
如果复选框嵌套在当前控件集合中,那么工作正常,但我想知道如何通过向下钻取到顶级控件的控件集合来扩展搜索.
这里问的问题是:
并且收到了非LINQ答案,我已经有自己的类型和ID作为扩展方法的递归控件搜索版本,但我只是想知道在LINQ中这样做有多容易?
Jon*_*eet 45
从递归中取出类型/ ID检查,所以只需要"给我所有控件,递归"方法,例如
public static IEnumerable<Control> GetAllControls(this Control parent)
{
foreach (Control control in parent.Controls)
{
yield return control;
foreach(Control descendant in control.GetAllControls())
{
yield return descendant;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这有点效率低(在创建大量迭代器方面),但我怀疑你会有一个非常深的树.
然后,您可以将原始查询编写为:
var checkBoxes = this.GetAllControls()
.OfType<CheckBox>()
.TakeWhile<CheckBox>(cb => cb.Checked);
Run Code Online (Sandbox Code Playgroud)
(编辑:将AllControls更改为GetAllControls并正确使用它作为方法.)