我有一个数据库表'DateExcluded'包含3整数列:年、月和日,后者是月份的第几天。我希望在实体查询中计算它们的组合,以检索从当前日期开始一年之前的所有行,如下所示:
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?
2条答案
按热度按时间8dtrkrch1#
我有一个数据库表'DateExcluded'包含3整数列:年、月、日。
永远不要为每个
year
、month
和day
创建列您正在创建一个non-sargable查询,也就是您所能创建的性能最差的查询。
正确的方法是实际使用
DateTime
字段,这样您的查询就正确了,不会出现任何不正确的数学运算。jdgnovmf2#
如果你仍然想使用DbFunctions.CreateDateTime,避免空值,因为它不能正常工作(参见Ole EH Dufour的注解中的原因)。你应该传递0而不是空值,如下所示: