0

我有两个相同类型的结构对象,并且想知道是否有一种方法可以对它们执行联合以产生一个结构对象,如果数据成员在其中一个 IQueryables 中可能是 NOTHING。我应该如何处理可能的空结果(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)
4

2 回答 2

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
于 2013-07-22T20:06:47.933 回答
0

您应该能够简单地通过

QyUnion = Qy1.Union(Qy2)

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

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

虽然,当第一个示例非常好时,我不知道为什么要在这里付出额外的努力。

于 2013-07-22T20:30:09.767 回答