Хорошо, я знаю, что на это много сообщений, но я пытаюсь решить это в течение нескольких часов, и мой мозг полностью отключен.Проблема VB.NET LINQ Group join
Вот вещь
У меня есть список объектов, с 3-мя свойствами (количество, сервис, имя)
Я хочу, чтобы все имена и услуги в моем списке (своего рода перекрестное соединение) и сгруппированное количество соответствующей строки. Не ясно, я думаю,
Количество Имя службы
3 SRV2 Боб
4 SRV2 Пол
2 Srv1 Пол
1 SRV2 Ник
Я хочу, чтобы в качестве выходного
Все услуги и все имена и соответствующие величины (0, если нет)
Srv1 Пол 2
Srv1 Bob 0
Srv1 Nick 0
SRV2 Пол 4
SRV2 Боб 3
SRV2 Ник 1
Вот что я до сих пор, но я даже не получить ожидаемый результат И я acutally наверняка есть довольно легко способ достижения того, что я хочу ... Я мало помощь будет приветствоваться ...
Благодаря
Dim services = (From a In interventions Select New With {.Service = a.Service}).Distinct()
Dim months = (From b In interventions Select New With {.Month = b.DateHeureIntervention.Month}).Distinct()
'Dim query = (From s In services _
' From m In months _
' From i In interventions.Where(Function(x) x.Service = s.Service And x.DateHeureIntervention.Month = m.Month).DefaultIfEmpty(New Intervention()) _
' Select New ChartItem With {.Service = s.Service, _
' .Name = MonthName(m.Month), _
' .Quantite = i.Quantite}).ToList()
'Return (From q In query _
' Group By srv = q.Service, n = q.Name Into Group _
' Select New ChartItem With {.Name = n, _
' .Service = srv, _
' .Quantite = Group.Sum(Function(i) i.Quantite)}).ToList()
Dim q = (From i In interventions _
Group Join s In services On s.Service Equals i.Service Into si = _
Group Join m In months On m.Month Equals i.DateHeureIntervention.Month _
From x In si.DefaultIfEmpty() _
Group By m = i.DateHeureIntervention.Month, srv = i.Service Into Group _
Select New ChartItem With {.Service = srv, _
.Name = MonthName(m), _
.Quantite = Group.Sum(Function(y) y.i.Quantite)}).ToList()
Return q