1

我有一个简单的 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();
4

1 回答 1

2

鉴于这DateEnable是 aDateTime?,您可以执行以下操作:

// 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可能不会给您预期的值(如果声明查询和执行查询之间的时间超过午夜)。

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

于 2012-06-25T14:10:51.877 回答