我有一个简单的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();
答案 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
,那么您将不得不求助于存储过程并调用它。