spędzam kilka godzin próbując tłumaczyć proste SQL lambda LINQPrzekłada SQL lambda i LINQ z GroupBy Średnia
SELECT ID, AVG(Score) FROM myTable
GROUP BY ID
Każdy pomysł?
spędzam kilka godzin próbując tłumaczyć proste SQL lambda LINQPrzekłada SQL lambda i LINQ z GroupBy Średnia
SELECT ID, AVG(Score) FROM myTable
GROUP BY ID
Każdy pomysł?
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
})
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)
}
Zauważ, że 'g.Key.ID' nie istnieje i nie będzie się kompilował. W tym fragmencie potrzebny jest tylko 'g.Key'. –
@AnthonyPegram dlaczego nie będzie się kompilować? Właśnie to przetestowałem. –
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. –
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.
w jakim języku tak? :) – spajce