2012-04-26 5 views
5

ho il seguente codiceLINQ to Entities non SqlFunctions.DateDiff supportato

DateTime now = DateTime.UtcNow; 

var allItemsOver64 = _inventoryContext.Items.Where(i => 
    (SqlFunctions.DateDiff("dd", i.PrimaryInsured.DoB, now)/365.0) >= 65); 

IQueryable<Item> items65To69 = allItemsOver64.Where(i => 
    (SqlFunctions.DateDiff("dd", i.PrimaryInsured.DoB, now)/365.0) >= 65 && 
    (SqlFunctions.DateDiff("dd", i.PrimaryInsured.DoB, now)/365.0) <= 69); 

Ma quando provo e uso allItemsOver64 quindi Items65To69.Count() ottengo questo errore

L'espressione ((((Converti (DateDiff ("dd", [10007] .PrimaryInsured.DoB, 26/04/2012 15:03:09))/365)> = 65) E ((Converti (DateDiff ("dd" , [10007] .PrimaryInsured.DoB, 26/04/2012 15:03:09))/365)> = 65)) E ((Converti (DateDiff ("dd", [10007] .PrimaryInsured.DoB, 26/04/2012 15:03:09))/365) < = 69)) non è supportato.

Cosa sto sbagliando?

+0

Grazie per la modifica Arion. –

+0

Quale sistema RDBMS stai usando? –

risposta

6

Forse potresti provare a utilizzare EntityFunctions invece di SqlFunctions.

+0

Ora ottengo l'espressione (((DiffYears ([10007] .PrimaryInsured.DoB, 26/04/2012 15:25:49)> = 65) E (DiffYears ([10007] .PrimaryInsured.DoB, 26/04/2012 15:25:49)> = 65)) E (DiffYears ([10007] .PrimaryInsured.DoB, 26/04/2012 15:25:49) <= 69)) non è supportato. –

+0

DbFunctions al giorno d'oggi; EntityFunctions è obsoleto –

+0

@ ThomasHagström - Perché dovresti dire che è obsoleto? Se controlli la documentazione, puoi vedere che è ancora inclusa nel framework e ci sono sicuramente ancora operazioni supportate lì che non sono supportate altrove. –

2

funzione DateDiff con LINQ to entità sta seguendo soffietto

Se si vuole

Day difference 
EntityFunctions.DiffDays(startDate , endDate); 

Hours diff -> 
EntityFunctions.DiffHours(startDate , endDate); 

Minuutes diff -> 
EntityFunctions.DiffMinutes(startDate , endDate);