La date n’est pas prise en charge dans LINQ to Entities. Seuls les initialiseurs, les membres d’entité et les propriétés de navigation d’entité sont pris en charge

J’essaie d’exécuter le code suivant et je reçois une erreur

public List GetLoggingData(DateTime LogDate, ssortingng title) { var context = new LoggingEntities(); var query = from t in context.Logs where t.Title == title && t.Timestamp == LogDate select t; return query.ToList(); } 

L’erreur que je reçois est “Le membre de type spécifié ‘Date’ n’est pas pris en charge dans LINQ to Entities. Seuls les initialiseurs, les membres d’entité et les propriétés de navigation d’entité sont pris en charge.” J’ai essayé plusieurs tentatives de lancer tout le monde sur une chaîne, en ne comparant que la partie date, mais je n’arrive pas à obtenir la combinaison correcte. Toute aide est grandement appréciée.

Si vous utilisez EF 6.0+, vous pouvez utiliser DbFunctions.TruncateTime(DateTime?) :

 var query = from t in context.Logs where t.Title == title && DbFunctions.TruncateTime(t.Timestamp) == LogDate.Date select t; 

Remarque: pour les versions antérieures de EF où DbFunctions n’est pas disponible, EntityFunctions.TruncateTime(DateTime?) Peut être utilisé à la place.

Pas la meilleure solution, mais ça marche. Pour diverses raisons, je dois utiliser .net 3.5 et modifier la firebase database serait difficile. En tout cas, voici une solution qui fonctionne:

  var query = from t in context.Logs where t.Title == title && t.Timestamp.Day == LogDate.Day && t.Timestamp.Month == LogDate.Month && t.Timestamp.Year == LogDate.Year select t; 

Pas la solution la plus élégante, mais efficace.

EntityFunctions.TruncateTime (t.Timestamp) est obsolète depuis EF6.

Utiliser ci-dessous

DbFunctions.TruncateTime (t.Timestamp)

Utilisez toujours EntityFunctions.TruncateTime () pour x.DateTimeStart et LogDate. tel que :

 var query = from t in context.Logs where t.Title == title && EntityFunctions.TruncateTime(t.Timestamp) == EntityFunctions.TruncateTime(LogDate) select t; 

Corrigez-moi si je me trompe, mais dans l’exemple de mikemurf22, il faudrait vérifier chaque partie du composant de date, et potentiellement beaucoup plus de traitement du serveur?

Quoi qu’il en soit, je suis tombé sur ce problème, et c’est ma solution.

En supposant que vous ne transmettiez que le composant de date, vous pouvez trouver la dernière minute du jour que vous transmettez et utiliser la clause where pour définir la plage.

 public List GetLoggingData(DateTime LogDate, ssortingng title) { DateTime enddate = new DateTime(LogDate.Year, LogDate.Month, LogDate.Day, 23, 59, 59) var query = from t in context.Logs where t.Timestamp >= date where t.Timestamp <= enddate select t; return query.ToList(); } 

Convertissez LongDate en .ToShortDateSsortingng et vous pourrez ensuite l’utiliser de cette manière:

 EntityFunctions.TruncateTime(t.Timestamp) == LogDate 

comme Mike l’a fait

Essaye ça:

 var calDate = DateTime.Now.Date.AddDays(-90); var result = return (from r in xyz where DbFunctions.TruncateTime(r.savedDate) >= DbFunctions.TruncateTime(calDate) 

Vous pouvez utiliser ce hack:

 DateTime startDate = LogDate.Date; DateTime endDate = LogDate.Date.AddDays(1); var query = from t in context.Logs where t.Title == title && t.Timestamp >= startDate && t.Timestamp < endDate select t;