Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于从集合中获取平均值的LINQ表达式_C#_Linq_Average - Fatal编程技术网

C# 用于从集合中获取平均值的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

是否有任何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 马那瓜 平均日期。 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”中