【问题标题】:How to convert the following foreach nested loop to LINQ?如何将以下 foreach 嵌套循环转换为 LINQ?
【发布时间】:2014-04-15 09:03:53
【问题描述】:

代码:

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 和 item.Children 是ObservableCollection<>

parent1.Header 和 children.Header 是HeaderedItemsControl.Header

parent1.Tag 和 children.Tag 是FrameworkElement.Tag

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

【问题讨论】:

  • 您应该使用 WPF 数据绑定将数据绑定到 RadTreeeView 控件,而不是在代码中创建项目。它更容易,并且已经支持分层绑定

标签: c# wpf performance linq foreach


【解决方案1】:

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

不完全是一种改进,IMO。

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 2011-06-07
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2020-12-07
    • 2014-03-17
    • 2020-11-26
    相关资源
    最近更新 更多