我是C#新手,这是我第一次使用LINQ查询。我有一个字典Dictionary<(int MeterId, DateTime TimeStamp), float>
,数据如下,
<(10411, 12/1/2022 12:30:00 AM), 5700>
<(10411, 13/1/2022 12:30:00 AM), 5200>
<(10412, 12/1/2022 12:30:00 AM), 200>
然后有一种方法可以将它们添加到一个列表中,该列表包含meterId和一周中每一天的平均值。我使用LINQ查询来计算平均值,并将它们添加到列表中。
public static List<AveragedMeter> CalculateAverageValues(Dictionary<(int MeterId, DateTime TimeStamp), float> groupedMeterValues)
{
var lstResult = groupedMeterValues
.GroupBy(m => new { m.Key.MeterId, m.Key.TimeStamp.DayOfWeek })
.Select(g => new AveragedMeter
{
MeterId = g.Key.MeterId,
AverageMondayValue,
AverageTuesdayValue,
AverageWednesdayValue,
AverageThursdayValue,
AverageFridayValue,
AverageSaturdayValue,
AverageSundayValue
})
.ToList();
return lstResult;
}
我不确定如何得到这些平均值。我的AveragedMeter类如下所示,
class AveragedMeter
{
public int MeterId { get; set; }
public float AverageMondayValue { get; set; }
public float AverageTuesdayValue { get; set; }
public float AverageWednesdayValue { get; set; }
public float AverageThursdayValue { get; set; }
public float AverageFridayValue { get; set; }
public float AverageSaturdayValue { get; set; }
public float AverageSundayValue { get; set; }
}
2条答案
按热度按时间mcdcgff01#
您可以按DayOfWeek在您的选择中过滤数据,而不是对字典进行分组,如下所示:
bkhjykvo2#
这个答案并不是性能最优的,因为它迭代了所有的值7次(不包括
GroupBy()
)。我提出了一个只迭代值两次的解决方案: