0

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

这就是我一直在尝试做的

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

4

1 回答 1

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 会缩小你的“之间”间隔)

于 2016-01-28T21:22:54.623 回答