2013-03-29 12 views

risposta

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

o Lambda

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

Grazie. Proprio quello di cui avevo bisogno. Funziona alla grande – Yuri

+0

il benvenuto. studiare duramente :) – 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

Si noti che 'g.Key.ID' non esiste e non verrà compilato. In questo frammento è necessario solo "g.Key". –

+0

@AnthonyPegram perché non verrà compilato? L'ho appena provato –

+0

Questa versione? Si dovrebbe ottenere un messaggio di errore indicando approssimativamente che "" int "non contiene una definizione per" ID "e nessun metodo di estensione" ID "che accetta ..." (Sostituendo "int" per qualunque sia il tipo di proprietà effettivo per ID). il punto è che 'g.Key' * è * l'ID. Non è un oggetto che contiene una proprietà ID. –

1

L'equivalente in Linq-to-Objects è simile al seguente.

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

È solo leggermente diverso per un quadro di entità ORM simile. Vale a dire, è necessario passare attraverso il contesto dati o un appropriato DbSet/ObjectSet.