Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅从datetimeoffset属性获取日期_C#_Entity Framework - Fatal编程技术网

C# 仅从datetimeoffset属性获取日期

C# 仅从datetimeoffset属性获取日期,c#,entity-framework,C#,Entity Framework,我使用EF从DB查询数据,其中一个字段是datetimeoffset,我希望它的值(仅日期)与datetime对象进行比较。问题是,当我尝试entity.DbFunctions.TruncateTime时,这不会使偏移消失,因为TruncateTime返回DateTimeOffset对象。我也不能用 日期,因为它将向linq异常抛出一个实体 entity.DbFunctions.TruncateTime(x.FromTime) == (assignmentDate) 试着用下面的方法 enti

我使用EF从DB查询数据,其中一个字段是datetimeoffset,我希望它的值(仅日期)与datetime对象进行比较。问题是,当我尝试entity.DbFunctions.TruncateTime时,这不会使偏移消失,因为TruncateTime返回DateTimeOffset对象。我也不能用

日期,因为它将向linq异常抛出一个实体

entity.DbFunctions.TruncateTime(x.FromTime) == (assignmentDate)

试着用下面的方法

entity.DbFunctions.TruncateTime(x.FromTime).Equals(assignmentDate) 

因为
=
用于object类型的表达式,它将解析为system.object.ReferenceEquals

DateTimeOffset有一个Date属性,该属性将仅日期部分作为DateTime返回,因此如下所示:

x.FromTime.Value.Date == (assignmentDate)

可能有用。但是,请记住x.FromTime和TruncateTime返回的值可以为null,因此您需要使用该值并适当地处理null。

您需要将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))

请告诉我们您尝试了什么?我无法粘贴整个查询,但这是where class
entity.DbFunctions.TruncateTime(x.FromTime)==(assignmentDate)
assignmentDate是DateTime搜索字段x.FromTime是DB DateTimeOffset字段您可以尝试将assignmentDate转换为DateTimeOffset范围吗。这可能不是正确的解决方案。但要找到正确的解决方案,还有一个办法。@Vijay正在尝试samei无法在实体-LINQT中调用.Date方法。这将导致“指定的类型成员'Date'在LINQ to Entities中不受支持”异常。LINQ将assignmentDate转换为datetime偏移量以进行比较。
((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))