2017-05-23 1 views
0

Je suis en train de le faire, mais il ne fonctionne pas, il renvoie des résultats vides:Comparer DateTimes dans Entity Framework

if (inputDate != null) 
{ 
    dataContext.myTable 
       .Where(r => r.myDate.HasValue && 
          r.myDate.Value.Day == inputDate.Value.Day) 
} 

Je veux comparer deux DateTime nullables valeurs, je veux récupérer uniquement DateTime les valeurs de base de données qui appartiennent à un certain Date. Et pour simplifier ce problème, j'essaie d'abord de ne comparer que leur valeur Day.

S'il vous plaît ne pas marquer comme doublon, je travaille avec EF5, donc je n'ai pas la fonction DbFunctions.TruncateTime().

+0

Vous pouvez simplement utiliser 'r.myDate.Date == inputValue.Date'. L'utilisation de 'Day' signifie que vous obtiendrez des correspondances quel que soit le mois. –

+0

Ne fonctionne pas il donne une exception: * Le membre spécifié 'Date' n'est pas supporté dans LINQ to Entities *. En fait EntityFramework ne reconise pas comment traduire ce code en sql –

+0

Essayez d'enlever 'r.myDate.HasValue' et d'utiliser' r.myDate.Date == inputValue.Date' –

Répondre

1

Comme vous l'avez dit, Entity Framework va générer une erreur. La meilleure option que vous avez est d'utiliser une requête avec une condition entre la première seconde du jour et la dernière seconde de la journée.

if(inputDate != null) 
{ 
    /* Assuming inputDate.Value only contains the Date part. 
     i.e. : 2017-05-23 instead of 2017-05-23 10:00:32 */ 
    DateTime inputDateFirstSecond = inputDate.Value; 
    DateTime inputDateLastSecond = inputDateFirstSecond 
     .AddHours(23) 
     .AddMinutes(59) 
     .AddSeconds(59); 

    dataContext.myTable.Where(r => r.myDate.HasValue && 
     (r.myDate.Value >= inputDateFirstSecond && r.myDate.Value <= inputDateLastSecond) 
    ) 
}  

Il y a quelques extensions Entity Framework pour SQL Server qui vous permettent de travailler avec les parties datetime, mais ils ne fonctionnerait pas si vous changez votre moteur de base de données à l'avenir.

+0

Merci, vous m'avez sauvé beaucoup de fois –