2013-07-22 1 views
0

J'ai deux objets de structure du même type et je voudrais savoir s'il existe un moyen d'effectuer une union pour produire un objet de structure si les membres de données ne sont RIEN dans un des IQueryables. Comment dois-je gérer les résultats vides possibles (l'un ou l'autre ou les deux Qy1/Qy2) et toujours capable de les fusionner sans connaître le résultat à l'avance. Merci d'avance!Effectuer une union sur des objets de structure de même type dans VB.net

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

Avez-vous essayé la déclaration .Union? http://msdn.microsoft.com/en-us/library/bb386993(v=vs.90).aspx –

Répondre

1

Je pense que vous êtes sur votre propre ici - ce que vous demandez (si je comprends ce que vous demandez) ne peut vraiment pas être prédit automatiquement, donc je pense que vous aurez besoin d'écrire une méthode comme:

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 
+0

Merci pour la réponse rapide. Je pensais que les membres de données peuvent être mis aux valeurs par défaut pour le type de données respectif des membres de données. Donc l'union de iQueryable de (Mystruct) aura Row (0) Dmem1 = Nothing; Dmem2 = txtField2, Row (1) Dmem1 = txtField1; Dmem2 = txtField2. Pour toutes les fins intensives, je peux par défaut en codant en dur les Nothings à String.Empty Mon problème est même quand je le fais, mon nouveau QyUnion n'a pas de lignes, aucune idée pourquoi? – TommyD314

+0

Je ne pense pas comprendre exactement ce que vous voulez. Je pensais que vous vouliez prendre une collection d'objets et les combiner en un, peupler autant de propriétés que vous le pouviez. Ce que vous décrivez est de prendre deux collections et de les combiner en une seule collection tout en combinant les objets individuels. Vous pourriez peut-être développer votre question en fournissant un exemple concret, et il pourrait être plus facile de suggérer une solution. –

0

vous devriez être en mesure d'obtenir l'union d'entre eux simplement par

QyUnion = Qy1.Union(Qy2) 

Pas besoin ici pour partir et sélectionnez, en particulier si vous êtes sélectionné l'objet complet. En fait, contrairement à C#, VB ne nécessite aucune sélection de fin. Ainsi, ce qui suit est parfaitement valable aussi bien:

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

Bien que, je ne sais pas pourquoi on prendrait l'effort supplémentaire ici lorsque le premier exemple est parfaitement bien.

+0

Merci Jim pour vos conseils – TommyD314

Questions connexes