首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在EF核心Linq GroupBy语句中用前导零格式化日期

在EF核心Linq GroupBy语句中用前导零格式化日期
EN

Stack Overflow用户
提问于 2020-05-15 08:28:17
回答 2查看 310关注 0票数 3

我有一个LINQ声明(EF核心3.1),我想按时间戳列的年份和月份分组,例如"2020-03“。

代码语言:javascript
复制
var result = _context.Messages
            .Where(x => x.timestamp != null)
            .GroupBy(x => x.timestamp.Value.Year.ToString()+"-" + x.timestamp.Value.Month.ToString())
            .Select(x => new { date = x.Key, count = x.Count() })

问题是数据的结果格式是"2020-3“,这就导致了以后的排序问题。

如何设置月份字符串的格式,使其始终具有带前导零的2位数字?

我读了很多关于SqlFunctions的文章--但EF中没有这些内容。还有别的办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-15 09:07:20

您可以按实际年份/月进行分组,然后投影出这些值。这样,分组就完全在SQL中完成了。一旦您拥有了内存中的集合,您就可以再次与D2 format specifer一起创建排序键。

代码语言:javascript
复制
var result = _context.Messages
            .Where(x => x.timestamp != null)
            .GroupBy(x => new { 
                x.timestamp.Value.Year,
                x.timestamp.Value.Month
             })
            .Select(x => new { 
                Year = x.Key.Year, 
                Month = x.Key.Month, 
                Count = x.Count() 
             })
            .AsEnumerable()
            .Select(x => new {
                Date = $"{x.Year:D2}-{x.Month:D2}",
                Count = x.Count
             }) 
            .ToList();
票数 2
EN

Stack Overflow用户

发布于 2020-05-15 08:45:00

您可以使用值为“ToString()”的d2方法的格式重载。这样,格式将确保始终得到两位数字:

代码语言:javascript
复制
x.timestamp.Value.Month.ToString("d2")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61814974

复制
相关文章

相似问题

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