C# FirstOrDefault在比较日期时间时,在不同的计算机上给出不同的结果?物体
我试图在IQueryable中比较两个可为空的DateTime对象(从数据库中获取),如下所示:C# FirstOrDefault在比较日期时间时,在不同的计算机上给出不同的结果?物体,c#,datetime,iqueryable,C#,Datetime,Iqueryable,我试图在IQueryable中比较两个可为空的DateTime对象(从数据库中获取),如下所示: result.FirstOrDefault(x => x.FirstDateTime == secondDateTime) 这在一些开发人员的计算机上正确执行,但在我的计算机上却没有。它没有结果。因为如果我将结果转换为如下列表,它会起作用: result.ToList().FirstOrDefault(x => x.FirstDateTime == secondDateTime) 当
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)谢谢您的回答!不幸的是,不是顺序错了,而是它没有返回任何数据。我看到了你的更新。如果没有它,我认为它会返回不同的值,根本没有任何值。评论不适合扩展讨论;这段对话已经结束。