我在每个ten seconds (minute中的six records)中收集数据。使用Entity Framework或LINQ,我希望获得每分钟内记录的平均值。
简单地说,Date列是(%Y.%m.%d %H:%i:%s)格式的,我想使用Entity Framework或LINQ在mysql中按(%Y.%m.%d %H:%i)格式分组
发布于 2015-12-08 21:49:13
假设您有一个date time列,您可以按DateTime属性Year、Month、Day、Hour和Minute进行分组。
var results = from row in db.SomeTable
group by new
{
row.Date.Year,
row.Date.Month,
row.Date.Day,
row.Date.Hour,
row.Date.Minute
} into grp
select new
{
YMDHM = grp.Key
SomeAverage = grp.Average(x => x.SomeValueToAverage)
};然后,在迭代结果时,可以将YMDHM中的值转换回DateTime。下面是一个可以将结果转换为Dictionary的示例。
var dictionaryOfAverages = results.ToDictionary(
x => new DateTime(x.YMDHM.Year,
x.YMDHM.Month,
x.YMDHM.Day,
x.YMDHM.Hour,
x.YMDHM.Minute,
0),
x => x.SomeAverage);另一方面,如果您的实际意思是将date time作为格式化字符串存储在DB中,那么以下内容将是您想要的
var results = from row in db.SomeTable
group by new row.Date.SubString(0, 16) into grp
select new
{
YMDHM = grp.Key
SomeAverage = grp.Average(x => x.SomeValueToAverage)
};这是假设字符串格式的日期看起来像"2013.05.08 07:25:33“,如果格式不是固定宽度的月、日和/或小时的前导零,则必须执行类似row.Date.SubString(0, row.Date.Length - 3)的操作
https://stackoverflow.com/questions/34157236
复制相似问题