我尝试过如下但不执行..
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"));
答案 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);