Я пытаюсь выполнить запрос к базе данных, используя EF Core 3, сгруппировать поле DateTime по дате и часам и добавить часть часа к дате при выборе. Пока что все мои Linqs не работают.
Случай неудачи 1. Добавьте часы к дате, используя AddHours.
Logs.GroupBy(g => new
{
g.DateStamp.Date,
g.DateStamp.Hour,
g.Result
}).Select(s => new
{
Date = s.Key.Date.AddHours(s.Key.Hour),
s.Key.Result,
Conversions = s.Count(),
Cost = s.Sum(sum => sum.ConversionCost)
}).OrderBy(o => o.Date)
Ошибка:
Дата часть часа не поддерживается by date Функция dateadd для типа данных date.
Не совсем точно, в чем проблема, AddHours не поддерживается Linq для провайдера Entity или поля s.Key.Date не могут больше содержать часы, потому что становится полем «Только дата».
Случай сбоя 2. Создайте новый объект DateTime и передайте переменные.
Logs.GroupBy(g => new
{
g.DateStamp.Date,
g.DateStamp.Hour,
g.Result
}).Select(s => new
{
Date =new DateTime(s.Key.Date.Year, s.Key.Date.Month, s.Key.Date.Day, s.Key.Hour, 0, 0),
s.Key.Result,
Conversions = s.Count(),
Cost = s.Sum(sum => sum.ConversionCost)
}).OrderBy(o => o.Date)
Ошибка:
InvalidOperationException: выражение LINQ 'OrderBy <<> f__AnonymousType1, DateTime> (источник: Selectf__AnonymousType0, Log>, <> f__AnonymousType1> (источник: GroupByf__AnonymousType0, Log> (источник: DbSet, keySelector: (l) => new {Date = l.DateStamp.Date, Hour = Hour l.DateStamp.Hour, Result = l.Result}, elementSelector: (l) => l), селектор: (e) => new {Date = new DateTime (e.Key.Date.Year, e.Key.Date .Month, e.Key.Date.Day, e.Key.Hour, 0, 0), Result = e.Key.Result, Conversio ns = Count (e), Cost = Sum (источник: e, селектор: (sum) => sum.ConversionCost)}), keySelector: (e0) => e0.Date) 'не удалось перевести. Либо переписать запрос в форме, которую можно перевести, либо явно переключиться на оценку клиента, вставив вызов либо AsEnumerable (), AsAsyncEnumerable (), ToList (), либо ToListAsyn c (). См. https://go.microsoft.com/fwlink/?linkid=2101038 для получения дополнительной информации.
OrderBy(o => o.Date)
перестает работать и дает исключение, почему? Я тоже понятия не имею.
Итак, последний вопрос: как сгруппировать поле DateTime из SQL База данных, используя EF Core по дате + час, и переместить его в Select в одно поле, а также выполнить OrderBy по новому полю Date в конце.