我是否可以使用任何LINQ表达式来获取集合的平均值,按Station
字段分组并按日期返回?
这是我的代码:
public class DatosDto
{
public string EstacionSensorEstacionNombre { get; set; }
public DateTime Fecha { get; set; }
public float Valor { get; set; }
}
我有这段代码:
double average = myCollection.Average(a => a.Valor);
返回此值:
Managua Date Average. 15-01-2013 15 16-01-2013 16 Rio Grande 15-01-2013 25 16-01-2013 196
答案 0 :(得分:1)
一些有趣的嵌套GroupBy
应该可以解决问题:
var grouped = stations
.GroupBy(s => s.EstacionSensorEstacionNombre) //Get all stations grouped
.Select(g => new
{
Station = g.Key,
DateAverages = g //All of the same named stations
.GroupBy(sub => sub.Fecha.Date) //Group those by date
.Select(subg => new
{
subg.Key,
Average = subg.Select(s => s.Valor).Average()
})
});
答案 1 :(得分:0)
这是我的解决方案。将Console.WriteLine替换为您想要使用的任何内容。
foreach (var station in myCollection.GroupBy((s) => s.EstacionSensorEstacionNombre))
{
Console.WriteLine(station.Key); // station name
foreach (var date in station.GroupBy((s) => s.Fecha))
{
Console.WriteLine(date.Key.ToString() + " " + date.Average(a => a.Valor)); //date + average value
}
}
您可能想要替换
(s) => s.Fecha
只能比较日/月/年而不是一天中的时间。
(s) => s.Fecha.Year * 1000 + s.Fecha.DayOfYear
有点hacky,但它应该做的工作。