数据按日期周期的分组聚合
废话不多说直接上代码
/// <summary>
/// 将数据按照周期聚合转化(多点)
/// </summary>
/// <param name="statsHistoryDTOs"></param>
/// <param name="ymdTypeEnum"></param>
/// <returns></returns>
[NonAction]
public List<StatsHistoryDTO> TransStatsHistoryBaseDataByCycleBatch(List<StatsHistoryDTO> statsHistoryDTOs, YmdTypeEnum ymdTypeEnum)
{
var returnInfo = new List<StatsHistoryDTO>();
var pointGroups= statsHistoryDTOs.GroupBy(a=>a.Pn).ToList();
foreach (var pointGroup in pointGroups)
{
List<IGrouping<string, StatsHistoryDTO>> groups = null;
switch (ymdTypeEnum)
{
case YmdTypeEnum.Y:
groups = pointGroup.GroupBy(a => a.Pt.ToString("yyyy-01-01 00:00:00")).ToList();
break;
case YmdTypeEnum.M:
groups = pointGroup.GroupBy(a => a.Pt.ToString("yyyy-MM-01 00:00:00")).ToList();
break;
case YmdTypeEnum.W:
groups = pointGroup.GroupBy(a => a.Pt.Date.AddDays(1 - ((int)a.Pt.DayOfWeek == 0 ? 7 : (int)a.Pt.DayOfWeek)).ToString("yyyy-MM-dd 00:00:00")).ToList();
break;
case YmdTypeEnum.D:
groups = pointGroup.GroupBy(a => a.Pt.ToString("yyyy-MM-dd 00:00:00")).ToList();
break;
case YmdTypeEnum.H:
groups = pointGroup.GroupBy(a => a.Pt.ToString("yyyy-MM-dd HH:00:00")).ToList();
break;
}
if (groups != null && groups.Count > 0)
{
returnInfo.AddRange(
groups.Select(a => new StatsHistoryDTO()
{
Pn = pointGroup.Key,
Pt = DateTime.Parse(a.Key),
Co2 = a.Select(a => a.Co2).Sum(),
Coal = a.Select(a => a.Coal).Sum(),
Money = a.Select(a => a.Money).Sum(),
Pv = a.Select(a => a.Pv).Sum()
}).ToList()
);
}
}
return returnInfo;
}
mark一下