2016-02-26 74 views
-1

我试图像下面,但不执行..如何获得仅一个月condtion记录的日期列

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

“不执行”是什么意思?它抛出异常吗? –

回答

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

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

此外,取而代之的是取得月份字符串并比较该值,然后比较DateTime值的Month属性。

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

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

其实你可以使用ToString(),但它取决于你的dll版本。

正确的做法是每月使用Datetime

比较两个日期时间的Month财产

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) 

希望它有帮助。

+0

很好的解释+1 –

相关问题