2013-07-22 5 views
0

У меня есть два объекта структуры одного типа и хотелось бы знать, есть ли способ выполнить объединение на них, чтобы получить один объект структуры, если члены данных могут быть НИЧЕГО в один из IQueryables. Как я должен обрабатывать возможные пустые результаты (оба или оба Qy1/Qy2) и все еще в состоянии объединить их, не зная результата заранее. Заранее спасибо!Выполнить объединение на объектах структуры того же типа в 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

Вы пробовали заявление .Union? http://msdn.microsoft.com/en-us/library/bb386993(v=vs.90).aspx –

ответ

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

Спасибо за быстрый ответ. Я думал, что данные данных могут быть установлены на значения по умолчанию для соответствующего типа данных членов данных. Таким образом, для iQueryable (Mystruct) в союзе будет Row (0) Dmem1 = Nothing; Dmem2 = txtField2, Row (1) Dmem1 = txtField1; Dmem2 = txtField2. Для всех интенсивных целей я могу их по умолчанию жестко кодировать Nothings для String.Empty Моя проблема даже тогда, когда я делаю то, что у моего нового QyUnion нет строк, любая идея почему? – TommyD314

+0

Я не думаю, что я точно понимаю, чего вы хотите. Я думал, что вы хотите взять коллекцию предметов и объединить их в одну, заполнив столько свойств, сколько сможете. То, что вы описываете, - это взять две коллекции и объединить их в одну коллекцию и в то же время объединить отдельные объекты. Возможно, вы могли бы расширить свой вопрос, предоставив реальный пример, и было бы проще предложить решение. –

0

вы должны быть в состоянии получить объединение их просто

QyUnion = Qy1.Union(Qy2) 

Нет необходимости здесь от и выбрать, особенно если вы только выбрать полный объект. Фактически, в отличие от C#, VB не требует выбора конца. Таким образом, следующий вполне допустимо, а также:

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

Хотя, я не знаю, почему можно было бы взять на себя дополнительные усилия здесь, когда первый пример прекрасно.

+0

Спасибо Джим за советы – TommyD314

Смежные вопросы