2010-08-20 13 views
21

Dies ist mein Code:LINQ to Entities mit AddMonth Methode

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

ich diesen Fehler:

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

Antwort

34

Vielleicht können Sie das Datum verschieben gegen anstatt zu testen:

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

In diesem Fall wirft ihn Ausnahme bei der Deklaration Testdate Variable: System.NullReferenceException: ‚Objektverweis nicht auf eine Instanz eines Objekts festgelegt.‘ CS $ <> 8__locals0 war null. –

+0

@ İlkinElimov Ja, wenn die Sequenz Nullreferenzen enthält, kann das passieren. Sie können das beheben, indem Sie sie zuerst mit '. Subscribers aussortieren. Wo (o => o! = Null) .Count (o => ...' –

29

Sie können SqlFunctions classvar;

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

Ich habe SqlFunctions noch nicht gesehen, interessante Sachen. –

+1

Nice one! Habe meinen Tag gerettet –

+0

Auch für mich gearbeitet Danke whitestream! – realPT

0

Sie haben die für Datum und Uhrzeit außerhalb der Anfrage zu verwenden, da Sie in der LINQ to Entities sind, die System.DateTime Bibliothek nicht verwenden.

Wenn Sie ein Update Datum verwenden die Sie es außerhalb der Anfrage als

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

Verwandte Themen