C# FirstOrDefault在比较日期时间时,在不同的计算机上给出不同的结果?物体

C# FirstOrDefault在比较日期时间时,在不同的计算机上给出不同的结果?物体,c#,datetime,iqueryable,C#,Datetime,Iqueryable,我试图在IQueryable中比较两个可为空的DateTime对象(从数据库中获取),如下所示: result.FirstOrDefault(x => x.FirstDateTime == secondDateTime) 这在一些开发人员的计算机上正确执行,但在我的计算机上却没有。它没有结果。因为如果我将结果转换为如下列表,它会起作用: result.ToList().FirstOrDefault(x => x.FirstDateTime == secondDateTime) 当

我试图在IQueryable中比较两个可为空的DateTime对象(从数据库中获取),如下所示:

result.FirstOrDefault(x => x.FirstDateTime == secondDateTime)
这在一些开发人员的计算机上正确执行,但在我的计算机上却没有。它没有结果。因为如果我将结果转换为如下列表,它会起作用:

result.ToList().FirstOrDefault(x => x.FirstDateTime == secondDateTime)
当然,我不想这样留下代码,这只是为了表明这不是因为在IQueryable中找不到日期

这两个值都是UTC。我尝试使用
Single
SingleOrDefault
First
,以及
Where
,结果都是一样的。我还尝试将
FirstDateTime.Value
secondDateTime.Value
进行比较。同样的结果

IQueryable的提供程序为

System.Data.Entity.Internal.Linq.DbQueryProvider

这可能是什么原因造成的?为什么第一部分在某些计算机上工作,但在其他计算机上不工作,这取决于什么

这是正在生成的SQL:

FROM ( SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[OtherProperty1] AS [OtherProperty1], 
[Extent1].[Version] AS [Version], 
[Extent1].[Submitted] AS [Submitted], 
[Extent1].[SubmittedBy] AS [SubmittedBy], 
[Extent1].[Created] AS [Created], 
[Extent1].[CreatedBy] AS [CreatedBy], 
[Extent2].[Value] AS [Value], 
[Extent2].[OtherProperty2] AS [OtherProperty2], 
[Extent2].[Description] AS [Description], 
[Extent2].[Latitude] AS [Latitude], 
[Extent2].[Longitude] AS [Longitude], 
[Extent2].[OtherProperty3] AS [OtherProperty3], 
[Extent2].[OtherProperty4] AS [OtherProperty4], 
[Extent2].[FirstDateTime] AS [FirstDateTime], 
''0X0X'' AS [C1]
FROM  [dbo].[StructuredInformations] AS [Extent1]
INNER JOIN [dbo].[Positions] AS [Extent2] ON [Extent1].[Id] = [Extent2].[Id]
WHERE ([Extent1].[OtherProperty1] = @p__linq__0) AND ([Extent2].
[FirstDateTime] IS NOT NULL) AND ([Extent2].[FirstDateTime] = @p__linq__1)
)  AS [Project1]
ORDER BY [Project1].[OtherProperty2] DESC, [Project1].[FirstDateTime] ASC,    
[Project1].[Value] ASC',N'@p__linq__0 int,@p__linq__1  
datetime2(7)',@p__linq__0=7,@p__linq__1='2016-10-11 11:45:53.6230000'

IQueryable
不保证订购<代码>列表执行。要保持
IQueryable
并保持顺序,您应该尝试对
IQueryable
进行排序,然后尝试获得第一个结果:

result.OrderBy(y => y.FirstDateTime).FirstOrDefault(x => x.FirstDateTime == secondDateTime)
问题类似于-看起来LINQ提供程序生成的日期时间值精度为7(例如,2016-10-11 11:45:53.6230000),而SQL中的列定义为,其精度低于7,而不是精度高达7


要解决这个问题,您可以将SQL中的列类型从datetime更改为datetime(7)

谢谢您的回答!不幸的是,不是顺序错了,而是它没有返回任何数据。我看到了你的更新。如果没有它,我认为它会返回不同的值,根本没有任何值。评论不适合扩展讨论;这段对话已经结束。