使用AddMonth方法的LINQ to Entities

时间:2010-08-20 08:39:55

标签: c# entity-framework

这是我的代码:

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

我收到此错误:

  

LINQ to Entities无法识别   方法'System.DateTime   AddMonths(Int32)'方法,这个   方法无法翻译成   商店表达。

4 个答案:

答案 0 :(得分:36)

也许您可以将日期改为测试而不是:

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

答案 1 :(得分:35)

您可以使用SqlFunctions classvar;

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

答案 2 :(得分:1)

您必须在请求之外使用Datetime,因为您位于不使用System.Datetime Library的LINQ TO ENTITIES中。

如果您希望使用修复日期,可以在请求之外将其定义为

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

答案 3 :(得分:0)

现在,上面的EntityFramework,Version = 6,您可以使用 System.Data.Entity.DbFunctions

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

但是,在这种情况下,请使用FredrikMörk回答的临时变量testDate使用更少的资源。