如何通过日期列上的月份条件获取记录

时间:2016-02-26 12:45:52

标签: linq

我尝试过如下但不执行..

var LeaveLimitCheck = db.LEAVE_APPLICATION_FORM.SingleOrDefault(em => em.LEAVE_TYPE_ID == LEAVE_APPLICATION_FORMObj.LEAVE_TYPE_ID
                                    && em.EMPLOYEE_ID == LEAVE_APPLICATION_FORMObj.EMPLOYEE_ID
                                    && em.FROM_DATE.ToString("MM")) == LEAVE_APPLICATION_FORMObj.FROM_DATE.ToString("MM"));

3 个答案:

答案 0 :(得分:1)

实际上您可以使用ToString(),但这取决于您的dll版本。

正确的方法是使用Month

Datetime属性

按月比较两个日期时间

Datetime1.Month == Datetime2.Month

或者您的日期时间是否可以为空

Datetime1.Value.Month == Datetime2.Value.Month

所以正确的linq查询就是例如

(from p in Source where p.DT.Value.Month == RequestedDatetime.Value.Month select p)

希望它有所帮助。

答案 1 :(得分:0)

您无法在linq中使用ToString()。请试试这个:

var LeaveLimitCheck = db.LEAVE_APPLICATION_FORM.SingleOrDefault(em => em.LEAVE_TYPE_ID == LEAVE_APPLICATION_FORMObj.LEAVE_TYPE_ID
                                    && em.EMPLOYEE_ID == LEAVE_APPLICATION_FORMObj.EMPLOYEE_ID
                                    && em.FROM_DATE.Value.Month) == LEAVE_APPLICATION_FORMObj.FROM_DATE.Value.Month);

答案 2 :(得分:0)

括号中有错误。日期比较发生在查询之外。

此外,不是获取月份字符串并进行比较,而是在Month值的DateTime属性上进行比较。

另外,为了便于阅读,我会移动您在查询之外找到的月份。

int monthToCheck = LEAVE_APPLICATION_FORMObj.FROM_DATE.Month;

var LeaveLimitCheck = db.LEAVE_APPLICATION_FORM.SingleOrDefault(em => em.LEAVE_TYPE_ID == LEAVE_APPLICATION_FORMObj.LEAVE_TYPE_ID
                        && em.EMPLOYEE_ID == LEAVE_APPLICATION_FORMObj.EMPLOYEE_ID
                        && em.FROM_DATE.Month == monthToCheck);