2016-10-17 1 views
1

FirstOrDefaultは、DateTimeを比較するときに異なるコンピュータで異なる結果を表示しますか?私は次のようにのIQueryable内(データベースから持ってきている)2つのNULL可能DateTimeオブジェクトを比較しようとしていたオブジェクト

result.FirstOrDefault(x => x.FirstDateTime == secondDateTime) 

これは、一部の開発者のコ​​ンピュータ上で正常に実行されるが、それは私にはありません。結果は得られません。私はこのようなリストに結果を変換する場合、それが動作するので:もちろん

result.ToList().FirstOrDefault(x => x.FirstDateTime == secondDateTime) 

を私はそのようなコードを残してしたく​​ない、それだけで日付が見つからないので、それがないことを示すことですIQueryable内

両方の値はUTCです。私はSingleSingleOrDefaultFirst、およびWhereを使ってみましたが、すべて同じ結果でした。私もFirstDateTime.ValuesecondDateTime.Valueを比較しようとしました。再び、同じ結果

のIQueryableのプロバイダは

System.Data.Entity.Internal.Linq.DbQueryProviderあります。

この原因は何ですか?どのように最初のセグメントはいくつかのコンピュータで動作しますが、他のものには依存しません。

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' 
+0

コメントは議論の対象外です。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/125927/discussion-on-question-by-robert-firstordefault-giving-different-results-on-diff)。 –

答えて

1

問題がthisに似ていること - LINQプロバイダが7の小数秒精度で日時値を生成したように見えます(例:2016-10-11 11:45:53.6230000)、SQLの列はdatetime2とは対照的に、7未満の精度を持つdatetimeと定義されています。

この場合、SQLの列型をdatetimeからdatetimeに変更することができます(7)

0

IQueryableは順序を保証するものではありません。

これは、生成されたSQLです。 List<T>があります。 IQueryableを維持し、あなたがIQueryableと最初の結果を取得しようとするよりも、をソートするために試してみてください秩序を維持するために:

result.OrderBy(y => y.FirstDateTime).FirstOrDefault(x => x.FirstDateTime == secondDateTime) 
+0

ありがとうございました!残念ながら、間違った順序ではありませんが、データは返されません – Robert

+0

あなたの更新を見ました。それがなければ、それは価値を返すのではなく、全く価値を返さない – Misiakw

関連する問題