正确使用DbFunctions.CreateDateTime()

时间:2015-10-25 19:14:21

标签: c# .net entities

我有一个数据库表格' 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?

1 个答案:

答案 0 :(得分:2)

  

我有一个数据库表格&#39; DateExcluded&#39;包含3个int列:年,月和日。

不要为每个yearmonthday

创建一列

您正在创建non-sargable查询,也称为您可以创建的效果最差的查询。

正确的方法是实际使用DateTime字段。那么你的查询是正确的,没有任何不正确的数学运算。

var l = 
(from p in c.DateExcluded 
 where
    c.DateExcluded < DateTime.Now.AddYears(1).AddDay(1)
 select p)
.ToList();