2017-01-19 1 views
1

Ich habe andere Themen hier untersucht, um zu lernen, wie man eine GroupBy in linq macht. Ich folge der EXACT-Syntax, die für andere funktioniert hat, aber es funktioniert nicht.IGrouping enthält keine Definition für

Hier ist die Abfrage:

var results = from p in pending 
       group p by p.ContactID into g 
       let amount = g.Sum(s => s.Amount) 
       select new PaymentItemModel 
       { 
        ContactID = g.ContactID, // <--- Error here 
        Amount = amount 
       }; 

pending ist ein List<T>, das unter anderer Spalt enthält, ContactID und Amount, aber das ist die einzig beide mich für diese Abfrage kümmern.

Das Problem ist, innerhalb der select new, die g. wird mir keine der Spalten in der ursprünglichen Liste, pending. Und wenn ich versuche, erhalte ich:

<int, LeadPurchases> IGrouping keine Definition für ContactID enthalten, und keine Erweiterung Methode bla bla bla ...

Dies ist die SQL ich nacheifern versuche:

SELECT 
    lp.PurchasedFromContactID, 
    SUM (lp.Amount) 
FROM 
    LeadPurchases lp 
GROUP BY 
    lp.PurchasedFromContactID 
+0

Sie wollen 'g.Key.ContactID' – Rob

+0

Das bekommt mich: Int enthält keine Definition für ContactID –

+3

Sorry - ich denke nicht gerade. Es sollte einfach 'ContactID = g.Key' sein, da du nur nach einem einzigen Wert gruppierst – Rob

Antwort

4

Sie Gruppierung auf der Basis von ContactID, so sollte es der Schlüssel für das Ergebnis sein, Sie haben also g.Key stattdessen verwenden für g.ContactID; Was bedeutet, die Abfrage wie die folgende sein sollten:

from p in pending 
       group p by p.ContactID into g 
       let amount = g.Sum(s => s.Amount) 
       select new PaymentItemModel 
       { 
        ContactID = g.Key, 
        Amount = amount 
       }; 

Updates: Gruppieren

Wenn Sie ausführen möchten, basierend auf mehr als eine Spalte wird die GroupBy-Klausel wie folgt sein:

group p by new 
{ 
    p.ContactID, 
    p.Field2, 
    p.Field3 
}into g 
select new PaymentItemModel() 
{ 
    ContactID = g.Key.ContactID, 
    anotherField = g.Key.Field2, 
    nextField = g.Key.Field3  
}; 
+0

ok, das sieht vielversprechend aus! Ich werde ein paar Tests durchführen und Bericht erstatten. Vielen Dank! –

+0

@CaseyCrookston: Cool Happy Codierung –

+0

Ok, süß, das hat funktioniert! Es lässt mich dies als die Antwort in 3 Minuten markieren. In der Zwischenzeit weiß ich, dass dies eine Ergänzung zu meinem OP ist, aber ... was wäre, wenn ich nach mehr Spalten gruppieren möchte? Würde es Ihnen etwas ausmachen, Ihrer Antwort hinzuzufügen, um zu zeigen, wie es aussehen würde, wenn Sie neben ContactID um eine weitere Spalte gruppieren würden? –

Verwandte Themen