EF core SQL datetime filter игнорирует миллисекунды в выражении, как это сделать?
Каков самый простой способ игнорировать миллисекунды при фильтрации по свойству DateTime (datetime2) в SQL Db?
Что я уже пробовал:
What I have is a DateTime filter like this: <pre> var parameter = Expression.Parameter(typeof(DeviceAlert), "x"); var predicate = Expression.Constant(request.AlertCreatedFilter.Value, typeof(DateTime)); var filterBinaryExpression = EvaluateEqualityOperator((EqualityOperator)request.EqualityOperator, parameter, predicate); var toLambdaExpression = Expression.Lambda<Func<DeviceAlert, bool>>(filterBinaryExpression, parameter); query = query.Where(toLambdaExpression);
private BinaryExpression EvaluateEqualityOperator(EqualityOperator equalityOperator, Expression parameter, Expression predicate) { var property = Expression.Property(parameter, typeof(DeviceAlert).GetProperty(nameof(DeviceAlert.CreatedTimestamp))); return equalityOperator switch { EqualityOperator.Equal => Expression.Equal(property, predicate), EqualityOperator.GreaterThan => Expression.GreaterThan(property, predicate), EqualityOperator.GreaterThanOrEqual => Expression.GreaterThanOrEqual(property, predicate), EqualityOperator.LessThan => Expression.LessThan(property, predicate), EqualityOperator.LessThanOrEqual => Expression.LessThanOrEqual(property, predicate), _ => throw new ArgumentOutOfRangeException("Equality operator not found."), }; }
Все работает нормально, за исключением того, что мне нужно игнорировать миллисекунды в запросах фильтра DateTime. Так, например,
DateTimeField >= 10.08.2020 11:55:15должен возвращать все значения для этой даты-времени, независимо от того, что такое миллисекунды.
Можно ли это сделать без преобразования в строку и сравнения с Contains?
0x01AA
Обходной путь: DateTimeField > 10.08.2020 11:55:14.999