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 сократят ваш интервал между ними)

Другие вопросы по тегам