仅从datetimeoffset属性获取日期

时间:2017-02-28 12:43:21

标签: c# entity-framework

我使用EF查询来自数据库的数据,我的一个字段是datetimeoffset,我希望将其值(仅限日期)与日期时间对象进行比较。问题是,当我尝试entity.DbFunctions.TruncateTime时,由于TruncateTime返回DateTimeOffset对象,因此不会使偏移消失。我不能也用。

将实体抛给linq异常的日期。

false

4 个答案:

答案 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))