简体   繁体   English

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

[英]How to convert the following foreach nested loop to LINQ?

Code: 码:

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);
}

items.Children and item.Children are ObservableCollection<> items.Children和item.Children是ObservableCollection<>

parent1.Header and children.Header are HeaderedItemsControl.Header parent1.Header和children.Header是HeaderedItemsControl.Header

parent1.Tag and children.Tag are FrameworkElement.Tag parent1.Tag和children.Tag是FrameworkElement.Tag

How to convert the above foreach nested loop to LINQ ? 如何将上述foreach嵌套循环转换为LINQ?

LINQ... Language INtegrated (and here's the key bit) Query . LINQ ...语言集成(这是关键位) Query

What you are doing is not a query. 您在做什么不是查询。 Leave it with the foreach loops; 保留foreach循环; it is fine, it is clear, it is obvious. 很好,很明显,很明显。

In particular, the .Items.Add methods on the various collections is not really something you can trivially reproduce in LINQ. 特别是,您可以在LINQ中轻松复制各种集合上的.Items.Add方法。 You can probably do it, but it will be ugly and hard to maintain. 您可能可以做到,但是它很难看而且很难维护。 What you have is fine. 你所拥有的一切都很好。 If you want to change it for change's sake, maybe: 如果您想为更改而更改它,也许:

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);

Not exactly an improvement, IMO. IMO,不完全是一种改进。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM