我可以使用LINQ来填充ObservableCollection的ObservableCollection

时间:2013-06-17 19:13:11

标签: c# linq

我有两个类,我正在尝试创建一个ObservableCollection<ClassA>,所以它基本上是一个树结构,因为这个父ObservableCollection将有一个类型为ClassB的子集合,My问题是:

我可以使用LINQ查询获取ObservableCollection<ClassB>,然后将其添加到ClassA的{​​{1}}。所以它基本上是子项(ObservableCollection)被添加到父项,但子项(ClassB)也有子项(ClassB中的ObservableCollection<ClassB>

ClassB

所以结构将是这样的,

public ClassA
{
    ObservableCollection<ClassB> classBItems = new ObservableCollection<ClassB>
    string name = "Something";

}

public ClassB
{
    ObservableCollection<ClassB> classBSubItems = new ObservableCollection<ClassB>
    string name = "Something";
    bool IsEnabled = false;

}

要将Child4插入此结构,我可以使用LINQ查询ParentA -Child1 -Child2 -Child3 -Child4 -Child5 吗?如果是这样,怎么样?我需要将此项添加到Child3

2 个答案:

答案 0 :(得分:0)

我不完全确定child4来自哪里,但根据您的上述结构,这将为您提供Child3。

        var child3 = observableOfClassA
            .SelectMany(a => a.classBItems) // flattens list to all classBItems
            .SelectMany(b => b.classBSubItems) // flattens list to classBItems.classBSubItems
            .Where(bSub => bSub.name == "child3s Name goes here")  // replace with your where clause
            .FirstOrDefault();

答案 1 :(得分:0)

您需要使用复合图案。看看http://en.m.wikipedia.org/wiki/Composite_pattern中提到的模式,你也可以将示例中给出的列表类型更改为接受集合的任何类型(甚至可观察的集合)