Dapper Расширения для сравнения дат с использованием предиката
Как вы сравниваете значения даты, используя группу предикатов
это то, что я пытался сделать
var predicateGroup = new PredicateGroup { Operator = GroupOperator.And, Predicates = new List<IPredicate>() };
predicateGroup.Predicates.Add(Predicates.Field<Contents>(f => f.Guid, Operator.Eq, staticContents.Guid));
predicateGroup.Predicates.Add(Predicates.Field<Contents>(f => f.StartDate, Operator.Ge, DateTime.UtcNow));
predicateGroup.Predicates.Add(Predicates.Field<Contents>(f => f.EndDate, Operator.Le, DateTime.Now));
Я пытаюсь выбрать значение с определенным идентификатором GUID и хочу, чтобы оно лежало между требуемой начальной датой и конечной датой.
Я тоже попробовал BetweenValue, но, похоже, это не помогло.
1 ответ
Сравнение дат:
Вместо того, чтобы делать:
predicateGroup.Predicates.Add(Predicates.Field<Contents>(f => f.EndDate, Operator.Le, DateTime.Now));
Вы также можете сравнить строковое представление ISO8601 даты. "2015-12-31". Как это:
predicateGroup.Predicates.Add(Predicates.Field<Contents>(f => f.EndDate, Operator.Le, "2015-12-31"));
Узнайте больше о сравнении запросов в SQL в другой публикации по переполнению стека. Этот пост также ссылается на страницу MSDN, объясняющую, как форматировать строковые форматы, инвариантные для культуры, для дат, а также даты и времени, если это может быть вашей проблемой.
Также помните, что аргумент Operator.Ge по умолчанию будет отображать ">=", в то время как Operator.Gt по умолчанию отображает ">", если это возможно. То же самое касается Operator.Le/Operator.Lt. (Это, вероятно, не проблема здесь, так как.Gt и.Lt сократят ваш интервал между ними)