2010-08-20 66 views
21

這是我的代碼:LINQ與AddMonth方法實體

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

我得到這個錯誤:

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

回答

34

也許你可以轉移的日期再次進行測試,而不是:

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

在這種情況下,它在聲明testDate變量時拋出異常: System.NullReferenceException:'未將對象引用設置爲對象實例。 CS $ <> 8__locals0爲空。 – 2017-06-21 08:46:30

+0

@İlkinElimov是的,如果序列包含空引用,則可能發生。你可以通過首先用'.Subscribers.Where(o => o!= null).Count(o => ...' – 2017-06-21 08:59:09

29

你可以使用SqlFunctions classvar;

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

)來過濾它們。我還沒有見過SqlFunctions,有趣的東西。 – 2012-05-29 16:34:22

+1

好的!保存了我的一天。 – 2013-04-25 13:32:28

+0

爲我效勞感謝whitestream! – realPT 2015-10-15 17:25:22

0

您必須在請求之外使用Datetime,因爲您在LINQ TO ENTITIES中不使用System.Datetime庫。

如果要使用的修復日期可以請求外部將其定義爲

的DateTime compareDate = DateTime.Now.AddMonths(X);