我有一个数据库表格' DateExcluded'包含3个int列:Year,Month和Day,后者是该月的daynumber。我希望在实体查询中评估它们的组合,以便在当前日期的一年之前检索所有行,如下所示:
var l =
(from p in c.DateExcluded
where
DbFunctions.CreateDateTime(p.Year, p.Month, p.Day, null, null, null)
<= DateTime.Now.AddYears(1)
select p).ToList();
此查询始终返回0列,但不应该这样。错误使用DbFunctions.CreateDateTime?
答案 0 :(得分:2)
我有一个数据库表格&#39; DateExcluded&#39;包含3个int列:年,月和日。
不要为每个year
,month
和day
您正在创建non-sargable查询,也称为您可以创建的效果最差的查询。
正确的方法是实际使用DateTime
字段。那么你的查询是正确的,没有任何不正确的数学运算。
var l =
(from p in c.DateExcluded
where
c.DateExcluded < DateTime.Now.AddYears(1).AddDay(1)
select p)
.ToList();