tôi dành một vài giờ cố gắng để dịch SQL đơn giản để lambda LINQDịch SQL để lambda LINQ với groupby và trung bình
SELECT ID, AVG(Score) FROM myTable
GROUP BY ID
Bất kỳ ý tưởng?
tôi dành một vài giờ cố gắng để dịch SQL đơn giản để lambda LINQDịch SQL để lambda LINQ với groupby và trung bình
SELECT ID, AVG(Score) FROM myTable
GROUP BY ID
Bất kỳ ý tưởng?
from t in myTable
group t by new {
t.ID
} into g
select new {
Average = g.Average(p => p.Score),
g.Key.ID
}
hoặc 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)
}
Lưu ý rằng 'g.Key.ID' sẽ không tồn tại và sẽ không biên dịch. Chỉ cần 'g.Key' trong đoạn mã này. –
@AnthonyPegram tại sao nó sẽ không biên dịch? Tôi vừa thử nghiệm nó. –
Phiên bản này? Bạn sẽ nhận được một thông báo lỗi nói rằng "int" không chứa định nghĩa cho 'ID' và không có phương thức mở rộng 'ID' chấp nhận ... "(Thay thế' int' cho bất kỳ loại thuộc tính thực tế nào cho ID.) điểm là 'g.Key' * là * ID. Nó không phải là một đối tượng có chứa một tài sản ID. –
Tương đương trong LINQ-to-Objects sẽ giống như dưới đây.
var results = from row in myTable
group row by row.Id into rows
select new
{
Id = rows.Key,
AverageScore = rows.Average(row => row.Score)
};
Nó chỉ hơi khác đối với ORM như khuôn khổ thực thể. Cụ thể, bạn sẽ cần phải đi qua bối cảnh dữ liệu hoặc một DbSet/ObjectSet thích hợp.
trong ngôn ngữ gì không? :) – spajce