我有按日期,pid,bidc分组的分数记录,并使用SUM来汇总分数。原始字段类型是日期时间。通过按日期分组,我得到了不正确的聚合,因为我在给定的一天内在给定的小时 - 分钟内有多个集合。处理这个并通过' MM-dd-yyyy hh-mm&#汇总的正确方法是什么? 39;
var scores = from ts in _context.Scores
select ts;
List<ScoreAgg> aggScores = scores.GroupBy(p => new { p.create_dt.Date, p.pid, p.bidc }).Select(g => new ScoreAgg()
{
pid = g.Key.pid,
bidc = g.Key.bidc,
score = g.Sum(s => s.weight),
create_dt = g.Key.Date
}).ToList<ScoreAgg>();
答案 0 :(得分:1)
您可以使用DbFunction.CreateDateTime构建日期而无需秒:
gets
答案 1 :(得分:0)
您应该考虑在表格上创建一个计算列,如
DateOnly AS CONVERT(date, [Date])
GroupBy(p => new { p.create_dt.DateOnly, p.pid, p.bidc })
并索引DateOnly列以使聚合更快。如果你只是在你的groupby子句中进行转换,Sql将不会使用Date上定义的索引。