2010-08-20 12 views
21

Questo è il mio codice:LINQ to Entities con metodo AddMonth

return Newsletterctx.Subscribers.Count(o => 
    o.Validated == false && 
    o.ValidationEmailSent == true && 
    o.SubscriptionDateTime.AddMonths(1) < DateTime.Now); 

ottengo questo errore:

LINQ to Entities does not recognize the method 'System.DateTime AddMonths(Int32)' method, and this method cannot be translated into a store expression.

risposta

34

forse si può spostare la data da confrontare invece:

DateTime testDate = DateTime.Now.AddMonths(-1); 
return Newsletterctx.Subscribers.Count 
      (o => o.Validated == false 
      && o.ValidationEmailSent == true 
      && o.SubscriptionDateTime < testDate); 
+0

In questo caso, genera un'eccezione durante la dichiarazione della variabile testDate: System.NullReferenceException: 'Riferimento oggetto non impostato su un'istanza di un oggetto.' CS $ <> 8__locals0 era nullo. –

+0

@ İlkinElimov Sì, se la sequenza contiene riferimenti null, ciò potrebbe accadere. Puoi correggerlo filtrandoli prima con '.Subscribers.Where (o => o! = Null) .Count (o => ...' –

29

È possibile utilizzare SqlFunctions classvar;

today = DateTime.Now; return Newsletterctx.Subscribers.Count(o => 
o.Validated == false && 
o.ValidationEmailSent == true && 
SqlFunctions.DateAdd("month",1,o.SubscriptionDateTime) <today); 
+2

Non ho mai visto SqlFunctions, roba interessante. –

+1

Bella! Ho salvato la giornata –

+0

Ho lavorato anche per me Grazie whitestream! – realPT

0

Devi usare il Datetime di fuori della richiesta perché si è in LINQ to Entities che non utilizzano System.DateTime Biblioteca.

Se si desidera utilizzare una data fix la si può definire di fuori la richiesta come

DateTime compareDate = DateTime.Now.AddMonths (x);

Problemi correlati