使用 Predicate 进行日期比较的 Dapper 扩展

Dapper Extensions for Date comparision using Predicate

如何使用谓词组比较日期值

这就是我一直在努力做的事情

    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,但它似乎没有帮助。

比较日期:

而不是做:

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"));

阅读更多关于 Query comparing dates in SQL in another Stack overflow post. This post also links to an MSDN page 解释如何格式化日期和日期时间的文化不变字符串格式(如果这可能是您的问题)。

还要记住参数 Operator.Ge 默认会呈现“>=”,而 Operator.Gt如果可能的话,默认情况下呈现“>”。 Operator.Le/Operator.Lt也是如此。 (这可能不是这里的问题,因为 .Gt 和 .Lt 会缩小你的 'between' 间隔)