如果数据库中有日期,请比较日期

时间:2012-06-25 13:27:35

标签: c# .net linq

我有一个简单的LINQ查询。我想只检查DateDisable,如果数据库中有条目。如果用户未选择日期以禁用该条目将始终显示。有人可以告诉我如何在linq中添加条件语句

return (from promo in context.Promoes
        where promo.DateEnable <= DateTime.Today
        where promo.DateDisable >= DateTime.Today
        orderby promo.SortOrder
        select promo).ToList();

1 个答案:

答案 0 :(得分:2)

Given that DateEnable is a DateTime?,您可以执行以下操作:

// Get today.
DateTime today = DateTime.Today;

return (
    from promo in context.Promoes
    where 
        promo.DateEnable <= today &&
        (promo.DateDisable == null || promo.DateDisable >= today)
    orderby promo.SortOrder
    select promo
).ToList();

基本上,您需要检查null 是否日期大于今天。

此外,您应该捕获语句之外的值,但不能保证LINQ提供程序能够正确地在数据库端翻译DateTime.Today

但是,请注意,由于延迟执行,如果等待很长时间执行查询,today可能无法提供您期望的值(如果声明查询和执行它之间的时间已经过去午夜)。

当然,如果您的数据库服务器与您的应用程序服务器位于不同的时区,那么您需要确保LINQ提供程序正确处理DateTime.Today(以便它在服务器上执行)并且如果要在数据库服务器上与时间进行比较,请使用它。如果您的提供商没有正确处理翻译DateTime.Today,那么您将不得不求助于存储过程并调用它。