因此,我的应用程序查询数据库,并检索一个由开始和结束日期选择器选择的范围内的事件列表。一直运行良好,但现在失败了。看起来好像范围包括从上个月到本月的日期(例如上周),那只是在五月的检索事件。。。。。。。。。。。。。。。。。。。。。。。。。。。。 >
foreach (Employee ID in activeEmployees)
{
var worked = (from workDays in dc.Events
where (workDays.Time.Day >= PayPeriodStartPicker.SelectedDate.Value.Day &&
workDays.Time.Month >= PayPeriodStartPicker.SelectedDate.Value.Month &&
workDays.Time.Year >= PayPeriodStartPicker.SelectedDate.Value.Year)
&& (workDays.Time.Day <= PayPeriodEndPicker.SelectedDate.Value.Day &&
workDays.Time.Month <= PayPeriodEndPicker.SelectedDate.Value.Month &&
workDays.Time.Year <= PayPeriodEndPicker.SelectedDate.Value.Year)
&& workDays.Employee == ID.ID
orderby workDays.Time, workDays.ID
select workDays).ToList();
答案 0 :(得分:1)
此查询的逻辑根本不起作用。假设您希望在2019年4月30日至2019年1月5日之间的所有数据:2019年,大于或等于30且小于或等于1的第4个月或第5个月以及和天的所有记录都将比赛。即它永远不会返回任何东西。
我不确定为什么会得到您所看到的输出,但是无论哪种方式都有问题。
我建议将日期存储为本地DateTime
,以便您可以使用其内置的比较功能。
答案 1 :(得分:1)
让我们面对现实吧,您的代码是一团糟(善意地说)。
如果您反复使用某些内容,请为其创建别名
var date = PayPeriodStartPicker.SelectedDate.Value;
分别比较日期(分别按天,天,月和年)不是正确的方法
如果我了解您想要什么,那么您的整个表情似乎可能会像这样
workDays.Time >= date &&
workDays.Time <= date &&
workDays.Employee == ID.ID
如果您需要忽略时间,我建议使用EntityFunctions.TruncateTime
和DateTime.Date
方法;