正确使用DbFunctions.CreateDateTime()
本文关键字:CreateDateTime DbFunctions | 更新日期: 2023-09-27 18:19:21
我有一个数据库表'DateExcluded'包含3个int列:年,月和日,后者是月的天数。我希望它们的组合在实体查询中进行评估,以便从当前日期检索一年之前的所有行,如下所示:
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?
我有一个数据库表'DateExcluded'包含3个int列:年,月和日。
不要为每个year
, month
和day
创建一个列
您正在创建一个不可搜索的查询,也被认为是您可以创建的性能最差的查询。
正确的方法是实际使用DateTime
字段。那么你的查询是正确的,没有任何错误的数学可能。
var l =
(from p in c.DateExcluded
where
c.DateExcluded < DateTime.Now.AddYears(1).AddDay(1)
select p)
.ToList();
如果您仍然想使用DbFunctions。CreateDateTime,避免空值,因为它不会正确工作(参见Ole EH Dufour评论中的原因)。你应该传递0而不是null,像这样:
DbFunctions.CreateDateTime(p.Year, p.Month, p.Day, 0, 0, 0)