首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Entity Framework或LINQ中选择时,如何将日期列分组为较不精确的格式?

问在Entity Framework或LINQ中选择时,如何将日期列分组为较不精确的格式?
EN

Stack Overflow用户
提问于 2015-12-08 21:32:24
回答 1查看 114关注 0票数 1

我在每个ten seconds (minute中的six records)中收集数据。使用Entity Framework或LINQ,我希望获得每分钟内记录的平均值。

简单地说,Date列是(%Y.%m.%d %H:%i:%s)格式的,我想使用Entity Framework或LINQ在mysql中按(%Y.%m.%d %H:%i)格式分组

EN

回答 1

Stack Overflow用户

发布于 2015-12-08 21:49:13

假设您有一个date time列,您可以按DateTime属性Year、Month、Day、Hour和Minute进行分组。

代码语言:javascript
复制
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的示例。

代码语言:javascript
复制
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中,那么以下内容将是您想要的

代码语言:javascript
复制
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)的操作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34157236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档