我得到奇怪的結果,試圖使用Linq和EF Core對日期列進行簡單查詢。奇怪的結果在使用EF核心的linq查詢中使用日期
如果我使用DateTime列表中的日期運行查詢,則不會得到任何結果。如果我替換DateTime.Now並添加負數天,以便如果匹配日期時間列表中的日期,則查詢返回預期結果。
那麼DateTime.Now和另一個DateTime對象有什麼區別?
在實踐中,爲什麼會變成這樣的工作(在第一個例子了30天了復卷給出相同的日期作爲datesToCheck [0]第二):
var reports = from r
in db.DailyReports
.Where(r => r.UserId.Equals(currentuser.Identity.Name)
&& r.Date > DateTime.Now.AddDays(-30))
select r;
但不是這樣的:
var reports = from r
in db.DailyReports
.Where(r => r.UserId.Equals(currentuser.Identity.Name)
&& r.Date > datesToCheck[0])
select r;
的數據庫是SQL服務器2017年,列
的datesToCheck列表生成周四非空的SMALLDATETIME S:
var datesToCheck = new List<DateTime>();
var startDate = DateTime.Now;
//get Monday date three weeks ago
if (DateTime.Now.DayOfWeek != DayOfWeek.Monday)
{
while (startDate.DayOfWeek != DayOfWeek.Monday)
{
startDate = startDate.AddDays(-1);
}
}
startDate = startDate.AddDays(-21);
while (startDate < DateTime.Now)
{
if (startDate.DayOfWeek != DayOfWeek.Saturday || startDate.DayOfWeek != DayOfWeek.Sunday)
{
datesToCheck.Add(startDate);
startDate = startDate.AddDays(1);
}
}
沒有意義,您能向我們展示'datesToCheck [0]'聲明和值嗎? –
沒問題胡安卡洛斯 - 我已經將它添加到問題 – Tim
沒有意義,兩個謂詞將在內存中進行評估(首先因爲AddDays函數,其次是因爲數組/列表索引器)。只要'datesToCheck [0]'包含'DateTime.Now.AddDays(-30)',兩個查詢都應該返回一個相同的結果。 –