#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?