2015-03-31 4 views
0

Я хочу группировать по списку с помощью VB.Net. Кажется простым, но я не могу заставить его работать. Я пробовал:Linq Group По нескольким свойствам в VB.Net

Dim groupedEmails = saEmails.GroupBy(Function(m) New With {m.Property1, m.Property2, m.Property3.SubProperty1}) 

У меня есть 6 пунктов в saEmails и две детали имеют один и тот же property1, свойство2 и Property3. К сожалению, во время выполнения я все еще получаю 6 элементов в groupedEmails, хотя моя группировка должна уменьшить это число до 5.

Я пробовал утверждение без «New With» (он все еще компилируется), но результатом является одна и та же. Я также не могу получить Linq для Entities («От почты в saEmails ...»), чтобы принять мое использование ключевого слова «Группа». У меня есть Импорт ed System.Linq.

Я также был бы доволен рабочим использованием .ToLookup().

Субъекты похожи на это:

Namespace Something 
    <DataContract()> 
    Public Class SAEmail 

     <DataMember()> 
     Public Property Property1 As Integer 

     <DataMember()> 
     Public Property Property2 As String 

     <DataMember()> 
     Public Property Property3 As Blah 

     <DataMember()> 
     Public Property Property4 As String 

    Public Overrides Function Equals(obj As Object) As Boolean 

     If obj Is Nothing OrElse Not Me.GetType() Is obj.GetType() Then 
      Return False 
     End If 

     Dim email As SAEmail = CType(obj, SAEmail) 
     Return Property1 = email.Property1 _ 
      AndAlso Property2 = email.Property2 _ 
      AndAlso Property1.SubProperty1 = email.Property3.SubProperty1 

    End Function 

    Public Overrides Function GetHashCode() As Integer 
     Return CInt(CLng(Property1) Xor CLng(Property2) Xor CLng(Property3.SubProperty1)) 
    End Function 

    End Class 

    <DataContract()> 
    Public Class Blah 

     <DataMember()> 
     Public Property SubProperty1 As Integer 

     <DataMember()> 
     Public Property SubProperty2 As String 

    End Class 
End Namespace 

Идеи?

+0

Можете ли вы опубликовать определение 'saEmails' и его класс? – Enigmativity

+0

ОК, я добавил выше. – Dewey

+0

Опубликуйте данные в своей коллекции в Property1, Property2, SubProperty1 – Tim

ответ

1

Как насчет создания составного группового ключа?

Dim groupedEmails = saEmails.GroupBy(Function(m) String.Format("{0}:{1}:{2}", m.Property1, m.Property2, m.Property3.SubProperty1)) 

Или, используя интерполированное строку, когда VB14 выпущен через несколько недель !:

Dim groupedEmails = saEmails.GroupBy(Function(m) $"{m.Property1}:{m.Property2}:{m.Property3.SubProperty1)}") 
Смежные вопросы