问题:通过dbContext.ExecuteQuery 得到数据并赋值给一个集合.
代码:
public IEnumerable<LeaveCodeSum> GetLeavTotal(string staffno,DateTime startDate,DateTime endDate) { string sql = @"SELECT RTRIM(LEAcode.Leave_Code) AS LeaveCode, RTRIM(LEAcode.Description) AS LeaveCodeName,ISNULL(T1.Total, 0) AS TotalNumber, RTRIM(PERempms.Staff_No) AS StaffNo, '{1}' AS StartDate, convert(datetime,'2013-11-01') AS EndDate FROM LEAcode LEFT OUTER JOIN PERempms ON LEAcode.Leave_Policy = PERempms.Leave_Policy LEFT OUTER JOIN (SELECT Leave_Code, SUM(Total_no_of_days) AS Total FROM LEAtrans WHERE (Staff_No = '{0}') AND (Start_date >= '{1}') AND (Start_date <= '{2}') GROUP BY Leave_Code) AS T1 ON T1.Leave_Code = LEAcode.Leave_Code WHERE (PERempms.Staff_No = '{0}')"; sql = string.Format(sql, staffno, startDate, endDate); IEnumerable<LeaveCodeSum> d = dbHr.ExecuteQuery<LeaveCodeSum>(sql); return d ; }
要点:查询出的字段必须和LeaveCodeSum类的属性相同.
运行后报错:指定的转换无效.
原因是:LeaveCodeSum的StartDate是DataTime类型.
解决办法:
1:修改StartDate类型为String类型(变通的方法)
2: convert(datetime, '{1}') AS StartDate(用Convert把string 转成datetime)