我使用EF查询来自数据库的数据,我的一个字段是datetimeoffset,我希望将其值(仅限日期)与日期时间对象进行比较。问题是,当我尝试entity.DbFunctions.TruncateTime时,由于TruncateTime返回DateTimeOffset对象,因此不会使偏移消失。我不能也用。
将实体抛给linq异常的日期。
false
答案 0 :(得分:1)
DateTimeOffset有一个Date属性,该属性仅将日期部分作为DateTime返回,因此类似于以下内容:
$content
可能会奏效。但是,请记住x.FromTime和TruncateTime返回的值是Nullable,因此您需要使用该值并适当地处理空值。
答案 1 :(得分:0)
x.FromTime.UtcDateTime == assignmentDate
答案 2 :(得分:0)
尝试使用类似下面的内容
i
因为entity.DbFunctions.TruncateTime(x.FromTime).Equals(assignmentDate)
用于对象类型的表达式,它将被解析为system.Object.ReferenceEquals
答案 3 :(得分:0)
您需要将truncatetime应用于两者以获得您要查找的结果。
x => EntityFunctions.TruncateTime (x.FromTime) == EntityFunctions.TruncateTime(assignmentDate)
当我尝试LINQ时,将assignmentDate转换为DateTimeOffset。即使在截断时间之后它也会失败,因为日期有不同的偏移量。
这将生成类似下面的SQL
((convert (datetimeoffset, convert(varchar(255), [Extent1].[FromTime], 102) + ' 00:00:00 ' + Right(convert(varchar(255), [Extent1].[FromTime], 121), 6) , 102)) = CAST( convert (datetime2, convert(varchar(255), @p__linq__0, 102) , 102) AS datetimeoffset))
OR ((convert (datetimeoffset, convert(varchar(255), [Extent1].[FromTime], 102) + '' 00:00:00 '' + Right(convert(varchar(255), [Extent1].[FromTime], 121), 6) , 102) IS NULL)
AND (convert (datetime2, convert(varchar(255), @p__linq__0, 102) , 102) IS NULL))