C# 用于从集合中获取平均值的LINQ表达式
是否有任何LINQ表达式可用于从集合中获取平均值,并按C# 用于从集合中获取平均值的LINQ表达式,c#,linq,average,C#,Linq,Average,是否有任何LINQ表达式可用于从集合中获取平均值,并按Station字段分组,然后按日期返回 这是我的密码: public class DatosDto { public string EstacionSensorEstacionNombre { get; set; } public DateTime Fecha { get; set; } public float Valor { get; set; } } 我有以下代码: double average = my
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
马那瓜
平均日期。
15-01-2013 15
16-01-2013 16
格兰德河
15-01-2013 25
16-01-2013 196
一些有趣的嵌套式
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()
})
});
这是我的解决办法。将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
有点黑,但它应该能完成任务。好吧,你有没有研究过如何按站点分组,首先?一旦你解决了这个问题,想一想你将如何从那个分组到按日期分组。然后您可以在该日期之前求平均值…我得到以下错误类型“<>f\uu AnonymousType0”与“CaelusReporting.Web.dll”中的类型一样存在于“CaelusReporting.Application.dll”中