Предполагая, что тип вашей колонки CreatedOn является DateTime, вы можете сделать хорошее использование DbFunctions.TruncateTime для этой ситуации:
ICollection<GroupedRow> result = context.TableName.GroupBy(t => DbFunctions.TruncateTime(t.CreatedOn))
.Select(g => new GroupedRow()
{
Sum = g.Sum(t => t.Amount),
DateCreatedOn = g.Key
}).OrderBy(c => c.DateCreatedOn).ToList();
где GroupedRow:
class GroupedRow
{
public int Sum { get; set; }
public DateTime? DateCreatedOn { get; set; }
}
Хотя запрос linq к объектам выглядит чистым, ge nerated SQL для Sql Server 2014 будет выглядеть следующим образом:
SELECT
[Project1].[C3] AS [C1],
[Project1].[C2] AS [C2],
[Project1].[C1] AS [C3]
FROM (SELECT
[GroupBy1].[K1] AS [C1],
[GroupBy1].[A1] AS [C2],
1 AS [C3]
FROM (SELECT
[Extent1].[K1] AS [K1],
SUM([Extent1].[A1]) AS [A1]
FROM (SELECT
convert (datetime2, convert(varchar(255), [Extent1].[CreatedOn], 102) , 102) AS [K1],
[Extent1].[Amount] AS [A1]
FROM [dbo].[TableName] AS [Extent1]
) AS [Extent1]
GROUP BY [K1]
) AS [GroupBy1]
) AS [Project1]
ORDER BY [Project1].[C1] ASC
102 стиль представляет собой формат "YYYY.MM.DD" согласно CAST and CONVERT (Transact-SQL) документации.
По крайней мере, вы можете отформатировать дату так, как вы хотите, в своем пользовательском интерфейсе, потому что в итоге у вас есть объект DateTime, но в вашем случае, возможно, вы захотите использовать Date.ToString("yyyy-MM-dd")
.