2013-06-28 13 views
22

Sto tentando di invalidare le richieste di amicizia che sono state ripubblicate meno di 30 giorni fa.Come utilizzare DATEADD su colonna in LINQ - DateAdd non riconosciuto da LINQ

var requestIgnored = context.Request 
    .Where(c => c.IdRequest == result.IdRequest 
      && c.IdRequestTypes == 1 
      && c.Accepted == false 
      && DateTime.Now <= (((DateTime)c.DateResponse).AddDays(30))) 
    .SingleOrDefault(); 

c.DateResponse è di tipo DateTime?. L'errore che sto avendo è:

LINQ non riconosce i .AddDays comando

+0

Che tipo di dispositivo si sta utilizzando LinqProvider? Per L2E: http://stackoverflow.com/questions/4146300/linq-to-entityframework-datetime –

risposta

41

Edit: Se stai usando EntityFramework> = 6.0, utilizzare DbFunctions.AddDays. Per versioni precedenti di Entity Framework, utilizzare EntityFunctions.AddDays:

var requestIgnored = context.Request 
    .Where(c => c.IdRequest == result.IdRequest 
      && c.IdRequestTypes == 1 
      && c.Accepted == false 
      && DateTime.Now <= DbFunctions.AddDays(c.DateResponse, 30)) 
    .SingleOrDefault(); 
+0

EntityFunctions è un nuovo mondo per me !! grazie!! Questo ha funzionato davvero bene. –

+2

Dovresti quindi "accettare come risposta". Attraversa il segno di spunta accanto alla risposta. Ciò darà credito alla persona che ti ha aiutato e aiuterà gli altri a trovare rapidamente la risposta corretta. – Tormod

+0

Si noti che 'EntityFunctions' funzionerà solo all'interno di un contesto EF. Il tentativo di valutare il metodo (ad esempio su una raccolta locale per i test di unità) genererà un'eccezione. –

3

Si potrebbe provare questo:

var thirtyDaysAgo = DateTime.Now.AddDays(-30); 
var requestIgnored = context.Request 
    .Where(c => 
     c.IdRequest == result.IdRequest && 
     c.IdRequestTypes == 1 && 
     c.Accepted == false && 
     c.DateResponse.HasValue && 
     thirtyDaysAgo <= c.DateResponse.Value) 
    .SingleOrDefault();