Je suis en train de comparer deux objets DateTime nullable (qui sont amenés à partir d'une base de données) dans un IQueryable comme suit:FirstOrDefault donnant des résultats différents sur différents ordinateurs lors de la comparaison de DateTime? objets
result.FirstOrDefault(x => x.FirstDateTime == secondDateTime)
Cette exécute correctement sur les ordinateurs de certains développeurs, mais il ne le fait pas sur le mien. Cela ne donne aucun résultat. parce que si je convertir le résultat à une telle liste, cela fonctionne:
result.ToList().FirstOrDefault(x => x.FirstDateTime == secondDateTime)
Bien sûr, je ne voudrais pas laisser le code comme ça, il est juste de montrer que ce n'est pas parce que la date ne peut pas être trouvé dans le IQueryable
Les deux valeurs sont UTC. J'ai essayé d'utiliser Single
, SingleOrDefault
, First
, et Where
tous avec les mêmes résultats. J'ai également essayé de comparer FirstDateTime.Value
avec secondDateTime.Value
. Encore une fois, même résultat
Le fournisseur pour le IQueryable est
System.Data.Entity.Internal.Linq.DbQueryProvider.
Ce qui pourrait être à l'origine de cela? Comment se fait-il que le premier segment fonctionne sur certains ordinateurs, mais pas sur d'autres, sur quoi pourrait-il dépendre?
C'est le SQL qui est généré:
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'
Les commentaires ne sont pas pour une discussion prolongée; cette conversation a été [déplacée pour discuter] (http://chat.stackoverflow.com/rooms/125927/discussion-on-question-by-robert-firstordefault-giving-different-results-on-diff). –