使用谓词进行日期比较的Dapper Extensions

时间:2015-02-18 15:51:09

标签: dapper-extensions

如何使用谓词组

比较日期值

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

    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的值,并希望它介于所需的startdate和enddate之间。

我也试过了BetweenValue,但似乎有点帮助。

1 个答案:

答案 0 :(得分: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"));

在另一个堆栈溢出帖子中阅读有关Query comparing dates in SQL的更多信息。这篇文章还链接到an MSDN page,解释如何格式化日期和日期时间的文化不变字符串格式,如果这可能是您的问题。

另请注意,默认情况下,参数 Operator.Ge 会呈现“&gt; =”,而默认情况下 Operator.Gt 会呈现“&gt;”如果可能的话。 Operator.Le / Operator.Lt 也是如此。 (这可能不是问题,因为.Gt和.Lt会缩小你的“间隔”)