Добавьте Day к DateTime в EF Core 3, когда Select выполнено - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь выполнить запрос к базе данных, используя 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 в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...