【发布时间】:2020-05-15 08:28:17
【问题描述】:
我有一个 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() })
问题是日期的结果格式是“2020-3”,导致后面的排序问题。
如何将月份字符串格式化为始终包含前导零的 2 位数字?
我阅读了很多关于 SqlFunctions 的内容 - 但这些在 EF Core 中不可用。还有其他方法吗?
【问题讨论】:
-
您应该按实际字段分组,然后在以后处理格式或作为添加的属性
-
从 sql 的角度来看,不做 group by 中的数据转换可能会有所帮助。 Sql 将能够使用那些列上的索引。然后,您可以将它们放入内存并进行格式化。只看结果。每个不同组一种格式与每行一种格式。并使用索引而不是对新创建的键进行分组。
标签: c# linq linq-to-sql ef-core-3.1