我有两个相同类型的结构对象,并且想知道是否有一种方法可以在它们之间执行联合以产生一个结构对象,如果数据成员可能在其中一个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)
答案 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)
虽然,我不知道为什么在第一个例子完全没问题的时候,为什么会在这里付出额外的努力。