2012-04-26 11 views
5

Mam następujący kodLINQ do podmioty nie SqlFunctions.DateDiff obsługiwane

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

Ale gdy próbuję i używać zatem allItemsOver64 Items65To69.Count() otrzymuję ten błąd

Wyrażenie ((((Konwertuj (DateDiff ("dd", [10007] .PrimaryInsured.DoB, 26/04/2012 15:03:09))/365)> = 65) I ((Konwertuj (DateDiff ("dd") [10007]. PrimaryInsured.DoB, 26/04/2012 15:03:09))/365)> = 65)) I ((Konwertuj (DateDiff ("dd", [10007] .PrimaryInsured.DoB, 26/04/2012 15:03:09))/365) < = 69)) nie jest obsługiwany.

Co robię źle?

+0

Dzięki za edycję Arion. –

+0

Z jakiego systemu RDBMS korzystasz? –

Odpowiedz

6

Może możesz spróbować użyć opcji EntityFunctions zamiast funkcji Sql.

+0

Teraz otrzymuję wyrażenie (((DiffYears ([10007] .PrimaryInsured.DoB, 26/04/2012 15:25:49)> = 65) I (DiffYears ([10007] .PrimaryInsured.DoB, 26/04/2012 15:25:49)> = 65)) Oraz (DiffYears ([10007] .PrimaryInsured.DoB, 26/04/2012 15:25:49) <= 69)) nie jest obsługiwany. –

+0

Obecnie funkcje Db; EntityFunctions jest przestarzały –

+0

@ ThomasHagström - Dlaczego powiedziałeś, że jest przestarzały? Jeśli sprawdzisz dokumentację, zobaczysz, że nadal jest ona zawarta w strukturze i zdecydowanie są tam obsługiwane operacje, które nie są obsługiwane gdzie indziej. –

2

funkcja DateDiff z LINQ do jednostki jest następujący poniżej

Jeśli chcesz

Day difference 
EntityFunctions.DiffDays(startDate , endDate); 

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

Minuutes diff -> 
EntityFunctions.DiffMinutes(startDate , endDate); 
Powiązane problemy