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

相关问题