2016-07-01 12 views
0

Wie funktioniert die Right Funktion in Entity Framework Query? Ich habe diese SQL-AbfrageC# Entitätsframework String Kanonische Funktionen

SELECT RIGHT('0' + '4'), DATEDIFF(MINUTE, DateReceived, GETDATE()) % 60), 2) 
FROM mytable //RESULTS = 04 

Die Right Funktion 0 infront grundsätzlich hinzufügen wird, wenn die Länge des übergebenen String kleiner als 2

Jetzt habe ich die gleiche Sache in Entity Framework Abfrage zu tun:

var query = (from b in sovDB.myTable 
select new 
{ 
    myMinutes = Right("0"+ (SqlFunctions.DateDiff("MINUTE", b.DateReceived, 
    SqlFunctions.GetDate()) % 60),2) 
}).ToList(); 

Aber es funktioniert nicht, irgendwie wird die Right Funktion nicht unterstützt.

+0

Klammern in Ihrem SQL sehen nicht ausgewogen aus. – dasblinkenlight

+0

Ich bin nicht sicher, ob die Konvertierung impliziter Typen von EF unterstützt wird: '" 0 "' (String) '+ (SqlFunctions.DateDiff (" MINUTE ", b.DateReceived, SqlFunctions.GetDate())% 60)' (int) . Was ist die genaue Fehlermeldung? –

Antwort

2

Genau das gleiche Problem hatte, als eine alte gespeicherte Prozedur Einheit umzuwandeln. Ich benutzte SqlFunctions.Replicate, das den Trick und Entity Framework hatte keine Beschwerden!

var query = (from b in sovDB.myTable 
select new 
{ 
    myMinutes = SqlFunctions.Replicate("0", 2 - (SqlFunctions.DateDiff("MINUTE", b.DateReceived, GetDate()) % 60).Length) + (SqlFunctions.DateDiff("MINUTE", b.DateReceived, GetDate()) % 60) 
}).ToList(); 
0

Versuchen explizit berechnete Minute Zeichenfolge zu konvertieren:

var query = (from b in sovDB.myTable 
select new 
{ 
    myMinutes = Right("0" + SqlFunctions.StringConvert((int)(SqlFunctions.DateDiff("MINUTE", b.DateReceived, SqlFunctions.GetDate()) % 60)), 2) 
}).ToList();