2017-03-29 5 views
1

ich dieses Ergebnis haben:Get Max() Zeilen pro Revisionsnummer in LinQ

Company_ID | State | City | Rev | 
Company 1 | S-A | C-1 | 1 | 
Company 2 | S-B | C-2 | 1 | 
Company 1 | S-A | C-3 | 2 | 

der Ergebnismenge, die ich wollte

Company_ID | State | City | Rev | 
Company 1 | S-A | C-3 | 2 | 
Company 2 | S-B | C-2 | 1 | 

ist Hier ist die Abfrage, die ich versucht:

var list = (from coy in TBL_COMPANY 
where coy.IsActive == "1" 
select coy).ToList() 
.Select(coy => new 
{ 
    coy.Company_ID, 
    coy.State, 
    coy.City, 
    coy.Rev 
}); 

var companyList = list.GroupBy (grp => new 
{ 
    grp.Company_ID, 
    grp.State, 
    grp.City 
}) 
.Select(cpy => new 
{ 
    CompanyID = cpy.Key.Company_ID, 
    State = cpy.Key.State, 
    City = cpy.Key.City, 
    Rev = cpy.Max(c => c.Rev) 
}).ToList(); 

Ich bin jedoch nicht in der Lage, das gewünschte Ergebnis zu erhalten. Mein Verdacht ist wegen der City weil es enthalten ist. Allerdings brauche ich diese Spalten (außer für die Rev). Gibt es eine Möglichkeit, dies zu tun?

+0

„Ich bin aber nicht in der Lage die Ergebnismengen zu tun, ich wollte.“ Inwiefern? Was bekommst du? –

+2

(Es ist nicht klar, warum Sie gruppieren nach Firmen-ID, Staat und Stadt überhaupt, um ehrlich zu sein. Ist die Firmen-ID der effektive Schlüssel hier, zusammen mit der Revision?) –

+0

Firmen-ID ist der Schlüssel, der hier verwendet wird. Es gibt eine Rowid in dieser Tabelle, aber pro Zeile hat einen anderen Wert. – Musikero31

Antwort

2

Das gewünschte Ergebnis passt nicht zu Ihrer Gruppierung. Es gibt 3 verschiedene City Items, die zu 3 Ergebnis Items führen sollten.

Ich würde sagen Jon Skeets Kommentar über Gruppierung nur von Company_ID ist korrekt.

-Code (Gruppe von Company_ID und die Einzelteile mit den höchsten Rev holen):

var result = TBL_COMPANY.Where(x => x.IsActive == "1") 
         .GroupBy(x => x.Company_ID) 
         .Select(x => x.OrderByDescending(y => y.Rev).First()) 
         .Select(x=> new {x.Company_ID, x.State, x.City, x.Rev}) 
         .ToList(); 
+0

Vielen Dank! Hab was ich brauchte. – Musikero31