簡體   English   中英

當列類型為日期時,EF Core 中的 DateTime 比較錯誤

[英]Wrong DateTime comparing in EF Core when column type date

我有實體 class:

public class Test
{
  public Guid Id { get; set; }
  
  [Column(TypeName = "date")]
  [DataType(DataType.Date)]
  public DateTime Date {get; set;}
}

我使用 PostgreSQL。在數據庫中Date列的類型為date 沒有此屬性( [Column(TypeName = "date")] )列的類型為timestamp

當我嘗試從 dbContext 獲取實體時出現問題:

public List<Test> GetEntities([DataType(DataType.Date)] DateTime date)
{
  var list = _context
      .Where(x => x.Date == date)
      .ToList()

    return list;
}

此方法始終返回空列表。 但是如果在 linq 中寫:

_context.Where(x => x.Date.Year == date.Year 
                        && x.Date.Month == date.Month 
                        && x.Date.Day == date.Day)

它工作正常並返回一些值。 為什么在第一個版本中它總是返回空列表?

Dot.net 沒有 Date數據類型 *,因此.Where(x => x.Date == date)比較日期和時間詳細信息。
由於您只想比較DateTime的日期部分,因此使用時應確保時間部分始終相等 - 您可以使用Date屬性(它為您提供一個DateTime值,時間部分為 00:00:00 :

public List<Test> GetEntities([DataType(DataType.Date)] DateTime date)
  => _context
        .Where(x => x.Date.Date == date.Date)
        .ToList();

*顯然,正如 MindSwipe 在他的評論中所寫,微軟最終在 dot.net 6 中添加了DateOnly結構。

嘗試按日期范圍進行比較:

public List<Test> GetEntities([DataType(DataType.Date)] DateTime date)
{
    var startDate = date.Date;
    var endDate = startDate.AddDays(1);

    var list = _context
       .Where(x => x.Date >= startDate && x.Date < endDate)
       .ToList();

    return list;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM