[英]EF Core Where Clause throws Exception when Comparing date with datenow
[英]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.