我正在使用EF 6和Oracle,我尝试使用员工编号和日期字段进行多列连接。我无法让LEFT OUTER JOIN正常工作,而且我很确定这是因为约会。我知道Oracle中的日期可能很棘手,我通常必须使用" TO_DATE"剥离HH:mm:ss的功能,只使用mm / dd / yyyy。但是,我不知道如何使用EF实现这一目标。
我尝试使用.ToShortDateString仅剥离mm / dd / yyyy但我必须将其解析回DateTime以便通过以下错误:The type of one of the expressions in the join clause is incorrect. Type interface failed in the call to 'join'
。从对该错误的研究看起来好像我的" reportDate"必须是DateTime类型才能匹配Oracle中的h.REPORT_DATE(DATETIME)字段。将其解析回DateTime的问题在于它变为" mm / dd / yyyy 12:00:00 AM"并导致数据不加入。
这是一些代码。
DateTime reportDate = DateTime.Parse(DateTime.Today.ToShortDateString());
var data = (from e in db.SAP_EMPLOYEE
join h in db.ABSMGMT_HOURS on new { a = e.EMP, b = reportDate }
equals new { a = h.EMP_ID, b = h.REPORT_DATE}
into t from rt in t.DefaultIfEmpty()
任何人都知道如何使用EF 6和Oracle的mm / dd / yyyy日期格式?
答案 0 :(得分:0)
在从一些建议的文章做了更多的研究之后,我认为我发现了Oracle的黑客攻击。基本上你必须分别比较年份,月份和日期。它绝对不优雅,但看起来很有效。
var data = (from e in db.SAP_EMPLOYEE
join h in db.ABSMGMT_HOURS on new { a = e.EMP, b = DateTime.Today.Year, c = DateTime.Today.Month, d = DateTime.Today.Day }
equals new { a = h.EMP_ID, b = h.REPORT_DATE.Year, c = h.REPORT_DATE.Month, d = h.REPORT_DATE.Day
希望这有助于其他人。