基于日期的 LINQ 查询因月份更改而失败?

Date based LINQ query failing with change of month?

所以我的应用程序查询数据库并检索落在由开始和结束日期选择器选择的范围内的事件列表。一直工作正常,但现在失败了。看起来如果范围包括从上个月到本月(比如上周)的日期,它只会检索 5 月的事件......我的眼睛因为盯着这个而融化,但也许有人能发现我遗漏的东西?

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();

这个查询的逻辑根本行不通。假设您想要 2019 年 4 月 30 日和 2019 年 5 月 1 日之间的所有内容:2019 年第 4 个月或第 5 个月 天大于或等于 30 且小于或等于的所有记录到 1 将匹配。 IE。它永远不会 return 任何东西。

我不确定你为什么会得到你所看到的输出,但无论哪种方式都有问题。

我建议将日期存储为本机 DateTime 以便您可以使用其内置的比较功能。

面对现实吧,你的代码一团糟(好心说的)​​。

如果您反复使用某个东西,请为其创建一个别名:

var date = PayPeriodStartPicker.SelectedDate.Value;

另外比较日期,分别按是不正确的这样做的方法。

如果我理解你想要什么,那么你的整个表达似乎可以这样分解:

workDays.Time >= date &&
workDays.Time <= date &&
workDays.Employee == ID.ID

如果您需要忽略时间我建议使用 EntityFunctions.TruncateTimeDateTime.Date 方法。