在 EF Core Linq GroupBy 语句中使用前导零格式化日期
Format date with leading zeros in EF Core Linq GroupBy statement
我有一个 LINQ 语句 (EF Core 3.1),我想在其中按时间戳列的年份和月份进行分组,例如"2020-03".
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() })
问题是date的结果格式是“2020-3”,导致后面的排序出现问题
如何设置月份字符串的格式,使其始终有 2 位数字和前导零?
我阅读了很多有关 SqlFunctions 的文章 - 但这些在 EF Core 中不可用。还有其他方法吗?
您可以使用值 "d2" 的 ToString()
方法的格式重载。这样格式将确保您始终获得两位数:
x.timestamp.Value.Month.ToString("d2")
您可以按实际 year/month 分组,然后投影出这些值。这样分组就完全在 SQL 中完成了。拥有内存中的集合后,您可以再次投影创建排序键以及 D2
format specifer
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();
我有一个 LINQ 语句 (EF Core 3.1),我想在其中按时间戳列的年份和月份进行分组,例如"2020-03".
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() })
问题是date的结果格式是“2020-3”,导致后面的排序出现问题
如何设置月份字符串的格式,使其始终有 2 位数字和前导零?
我阅读了很多有关 SqlFunctions 的文章 - 但这些在 EF Core 中不可用。还有其他方法吗?
您可以使用值 "d2" 的 ToString()
方法的格式重载。这样格式将确保您始终获得两位数:
x.timestamp.Value.Month.ToString("d2")
您可以按实际 year/month 分组,然后投影出这些值。这样分组就完全在 SQL 中完成了。拥有内存中的集合后,您可以再次投影创建排序键以及 D2
format specifer
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();