Группировка общего списка по 2 значениям и объединение из одного набора данных через LINQ в VB.NET - PullRequest
0 голосов
/ 27 июня 2011

Определение моего класса

    Public Class ProcessAlert
       Public LoanNumber As String
       Public EmailAddress As String
       Public AlertType As String
       Public AlertMethodID As Byte
    End Class

Общий список, представляющий данные, возвращаемые из БД

     Dim a As New List(Of ProcessAlert)

     a.Add(New ProcessAlert("0000112367", "5551110000@txt.att.net", "Alert", 2))
     a.Add(New ProcessAlert("0000112367", "5551110000@txt.att.net", "Document", 2))
     a.Add(New ProcessAlert("0000112367", "5551110000@txt.att.net", "Note", 2))
     a.Add(New ProcessAlert("0000112367", "jdoe@home.com", "Alert", 1))
     a.Add(New ProcessAlert("0000112367", "jdoe@home.com", "Document", 1))
     a.Add(New ProcessAlert("0000112367", "jdoe@home.com", "Note", 1))

     Return a

Я управлял этим оператором LINQ, который будет группироваться по LoanNumber и EmailAddress, но яне удается заставить AlertType отображаться как объединенное поле всех трех значений

     Dim res = Alerts.GroupBy(Function(g) New With {Key .A = g.LoanNumber, Key .B = g.EmailAddress}) 

. Этот код даст мне группировку по EmailAddress и значения, которые мне нужны: "jdoe@home.com",«Предупреждение, документ, заметка», «5551110000@txt.att.net», «Предупреждение, документ, заметка»

    Dim res = Alerts.GroupBy(Function(i) i.EmailAddress).Select(Function(g) New KeyValuePair(Of String, String)(g.Key, String.Join(",", g.Select(Function(x) x.AlertType).ToArray())))

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

    "0000112367","jdoe@home.com", "Alert, Document, Note"
    "0000112367","5551112222@txt.att.net", "Alert, Document, Note"

Как получить 2 поля для группировки, а затем объединить значения AlertType в одно поле ???

Заранее спасибо

1 Ответ

0 голосов
/ 14 июля 2011

Вы ищете что-то вроде этого:

From _a In a
Group _a.AlertType By _a.LoanNumber, _a.EmailAddress Into Group
Select New With
{
    .LoanNumber = LoanNumber,
    .EmailAddress = EmailAddress,
    .AlertTypes = String.Join(", ", Group.ToArray())
}
...