如何将以下foreach嵌套循环转换为LINQ?

Joh*_*hen 0 c# linq wpf performance foreach

码:

foreach (var item in items.Children)
{
    RadTreeViewItem parent1 = new RadTreeViewItem();
    parent1.Header = NodeHeader(item.Path, item.Name, SelectedPath, ProjectData);
    parent1.Tag = item;
    foreach (var child in item.Children)
    {
        RadTreeViewItem children = new RadTreeViewItem();
        children.Header = NodeHeader(child.Path, child.Name, SelectedPath, ProjectData);
        children.Tag = child;
        parent1.Items.Add(children);
    }
    Parent.Items.Add(parent1);
}
Run Code Online (Sandbox Code Playgroud)

items.Children和item.Children是 ObservableCollection<>

parent1.Header和children.Header是 HeaderedItemsControl.Header

parent1.Tag和children.Tag是 FrameworkElement.Tag

如何将上面的foreach嵌套循环转换为LINQ?

Mar*_*ell 6

LINQ ...语言已整合(这里是关键位)查询.

你在做什么不是一个查询.留下foreach环; 它很好,很明显,很明显.

特别是,.Items.Add各种集合上的方法并不是你在LINQ中可以轻易重现的东西.你可能会这样做,但它很难维护.你有什么好.如果你想为了改变而改变它,也许:

RadTreeViewItem parent1 = new RadTreeViewItem {
    Header = NodeHeader(item.Path, item.Name, SelectedPath, ProjectData),
    Tag = item
};
foreach (var child in item.Children)
{
    parent1.Items.Add(new RadTreeViewItem {
        Header = NodeHeader(child.Path, child.Name, SelectedPath, ProjectData),
        Tag = child
    });
}
Parent.Items.Add(parent1);
Run Code Online (Sandbox Code Playgroud)

IMO并不完全是一项改进.