DbArithmeticExpression arguments must have a numeric common type
ado.net, c#, entity-framework
Solution
Arithmetic with `DateTime` is not supported in Entity Framework 6 and earlier. You have to use DbFunctions*. So, for the first part of your statement, something like:
var sleeps = context.Sleeps(o =>
DbFunctions.DiffHours(o.ClientDateTimeStamp, clientDateTime) < 24);
Note that the `DiffHours` method accepts `Nullable<DateTime>`.
Entity Framwork core (when used with Sql Server, maybe other db providers) supports the DateTime `AddXxx` functions (like `AddHours`). They're translated into `DATEADD` in SQL.
*`EntityFunctions` prior to Entity Framework version 6.
Problem
``` TimeSpan time24 = new TimeSpan(24, 0, 0); TimeSpan time18 = new TimeSpan(18, 0, 0); // first get today's sleeping hours List<Model.Sleep> sleeps = context.Sleeps.Where( o => (clientDateTime - o.ClientDateTimeStamp < time24) && o.ClientDateTimeStamp.TimeOfDay > time18 && clientDateTime.TimeOfDay < time18 && o.UserID == userid).ToList(); ``` This Linq expression throws this exception: ``` DbArithmeticExpression arguments must have a numeric common type. ``` Please Help!