2016-06-08 148 views
0

我正在使用EF 6與Oracle,我正在嘗試使用員工編號和日期字段進行多列連接。我無法讓LEFT OUTER JOIN正常工作,我很確定這是因爲日期。我知道Oracle中的日期可能會非常棘手,我通常必須使用「TO_DATE」函數去掉HH:mm:ss,並且只使用mm/dd/yyyy。但是,我不知道如何使用EF來實現這一點。EF 6與Oracle - 如何加入日期字段?

我試過使用.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

如果它與EF6 ...'trunc(date)'一起使用,那麼您只能在DD/MM/YYYY上進行匹配。沒有時間部分。 '當sysdate-2/24 = sysdate then 1 else 0 end時,選擇案例trunc(sysdate-2/24)= trunc(sysdate)then 1 else 0從雙重截斷結束trunc截斷時間 – xQbert

+0

我知道在SQL我會使用trunc(日期),但如何與EF一起使用? EF沒有trunc()作爲我可以告訴的函數。 – Caverman

+0

'https://social.msdn''var x = myContext.MyTable.Where(i =>(i.MyDateColumn> = DateTime.ToDay)&&(i.MyDateColumn xQbert

回答

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 

希望這可以幫助別人。