2016-06-08 4 views
0

Ich benutze EF 6 mit Oracle und ich versuche, eine multiple Spalte Join mit einem Mitarbeiter Nummer und Datum Feld zu tun. Ich kann den LINKEN ÄUSSEREN JOIN nicht richtig arbeiten lassen und ich bin mir ziemlich sicher, dass es wegen des Datums ist. Ich weiß, dass Daten in Oracle knifflig sein können, und normalerweise muss ich die Funktion "TO_DATE" verwenden, um die HH: mm: ss zu entfernen und nur die MM/TT/JJJJ zu verwenden. Ich weiß jedoch nicht, wie dies mit EF erreicht werden kann.EF 6 mit Oracle - Wie man am Datumsfeld beitritt?

Ich versuchte mit der .ToShortDateString nur die MM/TT/JJJJ zu entfernen, aber ich musste es dann zu einer DateTime zurück Parse, um über den folgenden Fehler zu erhalten: The type of one of the expressions in the join clause is incorrect. Type interface failed in the call to 'join'. Aus der Untersuchung dieses Fehlers sieht es so aus, als ob mein "reportDate" vom Typ DateTime sein müsste, um das Feld h.REPORT_DATE (DATETIME) in Oracle zu finden. Das Problem mit Parsing es zurück zu DateTime ist, dass es dann wird "MM/TT/JJJJ 12:00:00 AM" und verursacht, dass die Daten nicht JOIN.

Hier ist etwas der Code.

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() 

Wer weiß, wie mit mm/tt/Datumsformate mit EF 6 und Oracle zu arbeiten?

+0

wenn es mit EF6 funktioniert ... 'trunc (Datum)' auf diese Weise Ihre Übereinstimmung nur auf DD/MM/YYYY. keine Zeit Portion. 'Select Fall, wenn sysdate-2/24 = sysdate dann 1 else 0 Ende, Fall, wenn trunc (sysdate-2/24) = trunc (sysdate) dann 1 else 0 Ende von dual' Trunc verkürzt die Freizeit – xQbert

+0

Ich weiß in SQL würde ich trunc (date) verwenden, aber wie verwende ich das mit EF? EF hat nicht trunc() als eine Funktion, die ich sagen kann. – Caverman

+0

'var x = myContext.MyTable.Where (i => (i.MyDateColumn> = DateTime.ToDay) && (i.MyDateColumn xQbert

Antwort

0

Nach mehr Forschung von einigen vorgeschlagenen Artikeln denke ich habe ich einen Hack für Oracle gefunden. Grundsätzlich müssen Sie das Jahr, den Monat und den Tag separat vergleichen. Es ist definitiv nicht elegant, aber sieht aus wie es funktioniert.

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 

Hoffe das hilft jemand anderem.