我得到奇怪的结果,试图使用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)',两个查询都应该返回一个相同的结果。 –