2013-03-29 27 views

cevap

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

veya Lambda de ne dilde

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

Teşekkürler. Tam ihtiyacım olan şey. Harika çalışıyor – Yuri

+0

hoş geldiniz. çok çalışmak :) – 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

"g.Key.ID" nin mevcut olmayacağını ve derlenmeyeceğini unutmayın. Bu kod parçasında yalnızca "g.Key" gerekiyor. –

+0

@AnthonyPegram neden derlenmeyecek? Sadece test ettim. –

+0

Bu sürüm nedir? "Int" ifadesinin 'ID' için bir tanım içermediğini ve 'ID' kabul edilmeyen bir uzantı yöntemi ... '' (“gerçek” türünün ID için değiştirilmesinden sonra 'int' ifadesini kullanan bir hata iletisi almanız gerekir.) Buradaki nokta, g.Key'nin * kimliği olmasıdır. Kimlik özelliği içeren bir nesne değildir. –

1

Linq'den Nesnelere eşdeğer aşağıdaki gibi bir şey olabilir.

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

Yalnızca ORM benzeri bir varlık çerçevesi için biraz farklıdır. Yani, veri bağlamı veya uygun bir DbSet/ObjectSet üzerinden gitmeniz gerekir.