2013-03-29 15 views

Odpowiedz

14
from t in myTable 
group t by new { 
    t.ID 
} into g 
select new { 
    Average = g.Average(p => p.Score), 
    g.Key.ID 
} 

lub Lambda

myTable.GroupBy(t => new {ID = t.ID}) 
    .Select (g => new { 
      Average = g.Average (p => p.Score), 
      ID = g.Key.ID 
     }) 
+0

Dziękuję. Dokładnie to, czego potrzebowałem. Działa świetnie – Yuri

+0

Twoje powitanie. uczyć się ciężko :) – spajce

0
var _result = from a in myTable 
       group a by a.ID into g 
       select new 
       { 
        ID = g.Key.ID, 
        AverageResult = g.Average(x => x.Score) 
       } 
+1

Zauważ, że 'g.Key.ID' nie istnieje i nie będzie się kompilował. W tym fragmencie potrzebny jest tylko 'g.Key'. –

+0

@AnthonyPegram dlaczego nie będzie się kompilować? Właśnie to przetestowałem. –

+0

Ta wersja? Powinieneś otrzymać komunikat o błędzie z grubsza stwierdzający, że "int" nie zawiera definicji "ID" i żadnej metody rozszerzenia "ID" akceptującej ... "(Zastępując' int' dla jakiegokolwiek rzeczywistego typu właściwości dla ID.) Punkt jest taki, że 'g.Key' * jest * identyfikatorem. To nie jest obiekt zawierający własność ID. –

1

Równowartość w Linq-to-Objects będzie podobna do poniższej.

var results = from row in myTable 
       group row by row.Id into rows 
       select new 
       { 
        Id = rows.Key, 
        AverageScore = rows.Average(row => row.Score) 
       }; 

To tylko nieznacznie różni się dla struktury ORM podobnego podmiotu. Mianowicie, musiałbyś przejść przez kontekst danych lub odpowiedni DbSet/ObjectSet.