2010-12-02 3 views
1

Хорошо, я знаю, что на это много сообщений, но я пытаюсь решить это в течение нескольких часов, и мой мозг полностью отключен.Проблема 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 

ответ

0

Я получил это вот мой результат, то, конечно, это лучший способ, но так или иначе, это работает

Dim months As List(Of Integer) = (From b In interventions Select b.DateHeureIntervention.Month).Distinct().ToList() 
    Dim services As List(Of String) = (From c In interventions Select c.Service).Distinct().ToList() 

    Dim q = (From s In services _ 
      From m In months _ 
      Select New ChartItem With {.Name = MonthName(m), _ 
             .Service = s, _ 
             .Quantite = (From i In AccesDonneesHelper.GetInterventionsDetails() _ 
                Where i.Service = s And i.DateHeureIntervention.Month = m _ 
                Select i.Quantite).Sum()}).ToList()