Группировка узлов ядра Entity Framework по дате

#entity-framework-core #npgsql #nodatime

#entity-framework-core #npgsql #nodatime

Вопрос:

Я использую NodaTime и ядро Entity Framework, и теперь я пытаюсь сгруппировать свой запрос по дате, хотя я использую Instant тип данных поля. Насколько я понял, используя dateColumn.Дата (при использовании DateTime) должна работать и передавать запрос date_trunc('day', dateColumn) , но как я могу добиться этого с помощью Instant типа NodaTime?

Проблема, которую я вижу, заключается в том, что Instant требует передачи часового пояса, чтобы разрешить день, который бросил бы

Либо перепишите запрос в форме, которая может быть переведена…

Ответ №1:

Если вам нужно выполнять операции с человеческими календарными единицами (например, днями, месяцами …), То рассмотрите возможность использования LocalDateTime вместо этого. Идея Instant заключается именно в том, что он не поддерживает операции с человеческим календарем и т. Д.

Что-то вроде этого должно работать:

 _ = await ctx.Blogs.GroupBy(b => b.Creation.Date).CountAsync();

public class BlogContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        => optionsBuilder.UseNpgsql(@"...", o => o.UseNodaTime());
}

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
    public LocalDateTime Creation { get; set; }
}
 

Комментарии:

1. Это то, что я на самом деле ожидал от решения — у вас есть пример, как я мог бы выполнить вышеуказанный запрос с полем LocalDateTime?