2010-12-02 14 views
1

Ok Ich weiß, es gibt eine Menge Beiträge auf diesem, aber ich habe versucht, dies für ein paar Stunden zu lösen, und mein Gehirn ist komplett aus. HierProblem VB.NET LINQ Gruppe Beitritt

ist die Sache

Ich habe eine Liste von Objekten mit 3 Eigenschaften (Menge, Service, Name)

ich alle Namen und Dienste in meiner Liste haben will (ein bisschen Kreuz verbinden) und die gruppierte Menge der entsprechenden Zeile. Nicht klar denke, ich

Menge Service Name
3 srv2 Bob
4 srv2 Paul
2 Srv1 Paul
1 srv2 Nick

ich als Ausgabe wollen
alle Dienste und alle Namen und entsprechenden Mengen (0, wenn keine)

Srv1 Paul 2
Srv1 Bob 0
Srv1 Nick 0
srv2 Paul 4
srv2 Bob 3
srv2 Nick 1

Hier ist, was ich so weit gekommen, aber ich nicht sogar die erwarteten Ergebnisse bekommen, und ich bin acutally sicher, dass es ein ziemlich einfach Art und Weise zu erreichen, was ich will ... ich wenig Hilfe wäre willkommen ...

Dank

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 

Antwort

0

ich habe hier ist mein Ergebnis gibt sicherlich einen besseren Weg, aber immerhin, es funktioniert

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()