在VB.net中对相同类型的结构对象执行联合

时间:2013-07-22 19:38:51

标签: vb.net visual-studio-2010 linq

我有两个相同类型的结构对象,并且想知道是否有一种方法可以在它们之间执行联合以产生一个结构对象,如果数据成员可能在其中一个IQueryable中没有。我应该如何处理可能的空结果(Qy1 / Qy2中的任何一个或两者)并且仍然能够在不事先知道结果的情况下合并它们。提前谢谢!

Structure MyStrut 
    public DMem1 As String 
    public DMem2 As String 
End Structure

Dim Qy1 As IQueryable(Of Mystrut) 
Dim Qy2 As IQueryable(Of Mystrut) 
Dim QyUnion As IQueryable(Of Mystrut)

Qy1 = from q1 In query1 select new MyStrut{.DMem1 = Nothing, .DMem2=q1.txtField2}

Qy2 = from q2 In query2 select new MyStrut{.DMem1 = q2.txtField1, .DMem2=Nothing}

QyUnion = (From x In Qy1 select x).Concat(From y In Qy2 select y)

2 个答案:

答案 0 :(得分:1)

我认为你自己在这里 - 你要求的是什么(如果我理解你的要求)真的无法自动预测,所以我认为你需要写一个方法,如:

Public Function Combine(input As IEnumerable(Of MyStruct)) As MyStruct
    Dim result As New MyStruct()
    For Each s As MyStruct In input
        If (result.DMem1 Is Nothing AndAlso s.DMem1 IsNot Nothing) Then
            result.DMem1 = s.DMem1
        End If
        If (result.DMem2 Is Nothing AndAlso s.DMem2 IsNot Nothing) Then
            result.DMem2 = s.DMem2
        End If
    Next
    Return result
End Function

答案 1 :(得分:0)

你应该能够通过

获得他们的联合
QyUnion = Qy1.Union(Qy2)

此处不需要from和select,特别是如果您只是选择完整对象。实际上,与C#不同,VB不需要任何结束选择。因此,以下内容也完全有效:

QyUnion = from a in Qy1.
          Union(from b in Qy2)

虽然,我不知道为什么在第一个例子完全没问题的时候,为什么会在这里付出额外的努力。