具有相同基类的LINQ Union对象

时间:2011-04-05 18:30:56

标签: vb.net linq-to-entities union

我正在尝试使用Union从几个对象列表中创建所有对象的列表。

Return Chart.AnnotativeNodes.Union( _
         Chart.DecisionNodes.Union( _
           Chart.EndNodes.Union( _
             Chart.StartNodes.Union(Chart.WorkCenterNodes))))

上述行收到错误,因为我无法将List(of AnnotativeNode)List(of DecisionNode)结合使用。每个列表定义为List(of EndNode)List(of StartNode),但每个类都继承自基类型节点。

是否有可能将这些结合起来以获得IEnumerable(of Node)的结果?

1 个答案:

答案 0 :(得分:1)

如果你使用的是.NET 4,你应该可以这样做:

Return Chart.AnnotativeNodes.Union(Of Node) _
           (Chart.DecisionNodes.Union(Of Node) _
               (Chart.EndNodes.Union(Of Node) _
                   (Chart.StartNodes.Union(Of Node)(Chart.WorkCenterNodes))))

由于.NET 4中的通用协方差,这应该可行。否则,您只需在每个集合上调用Cast(Of Node)

我怀疑你的代码可以更容易阅读,如:

Return Chart.AnnotativeNodes.Union(Of Node)(Chart.DecisionNodes) _
                            .Union(Of Node)(Chart.EndNodes) _
                            .Union(Of Node)(Chart.StartNodes) _
                            .Union(Of Node)(Chart.WorkCenterNodes)

如果你需要以特定顺序发生联合,你可以搞砸它 - 我没有打扰,因为Union本来就是一个集合操作。