C# 如何在Linq to Entities查询中使用DateTime.AddXXXX函数?
我试图在查询中使用C# 如何在Linq to Entities查询中使用DateTime.AddXXXX函数?,c#,linq,entity-framework,linq-to-entities,C#,Linq,Entity Framework,Linq To Entities,我试图在查询中使用AddMonths List<Entities.Subscriber> items = (from s in context.Subscribers where s.Validated == false && s.ValidationEmailSent == true && s.SubscriptionDateTime < DateTime.Now.AddMonths(-1)
AddMonths
List<Entities.Subscriber> items = (from s in context.Subscribers
where s.Validated == false && s.ValidationEmailSent == true && s.SubscriptionDateTime < DateTime.Now.AddMonths(-1)
select s).ToList();
List items=(来自context.Subscribers中的)
其中s.Validated==false&&s.ValidationEmailSent==true&&s.SubscriptionDateTime
但我收到了一个错误:
LINQ to实体无法识别方法“System.DateTime”
AddMonths(Int32)方法,此方法无法转换为
存储表达式
有没有办法在查询中使用此函数?最简单的解决方法是在使用LINQ之前计算一次时间限制:
DateTime limit = DateTime.Now.AddMonths(-1);
List<Entities.Subscriber> items = (from s in context.Subscribers
where s.Validated == false && s.ValidationEmailSent == true &&
s.SubscriptionDateTime < limit)
select s).ToList();
DateTime limit=DateTime.Now.AddMonths(-1);
列表项=(来自context.Subscribers中的)
其中s.Validated==false&&s.ValidationEmailSent==true&&
s、 SubscriptionDateTime<限制)
选择s.ToList();
或者更容易理解:
var items = context.Subscribers
.Where(s => !s.Validated &&
s.ValidationEmailSent &&
s.SubscriptionDateTime < limit)
.ToList();
var items=context.Subscribers
.其中(s=>!s&&
s、 验证邮件发送&&
s、 SubscriptionDateTime<限制)
.ToList();
在这里使用查询表达式没有任何好处,在我看来,与
true
和false
进行显式比较非常困难(当然,除非您的属性类型为Nullable
)。您可以将代码更改为:
DateTime oneMonth = DateTime.Now.AddMonths(-1)
List<Entities.Subscriber> items = (from s in context.Subscribers
where s.Validated == false && s.ValidationEmailSent == true && s.SubscriptionDateTime < oneMonth
select s).ToList();
DateTime oneMonth=DateTime.Now.AddMonths(-1)
列表项=(来自context.Subscribers中的)
其中s.Validated==false&&s.ValidationEmailSent==true&&s.SubscriptionDateTime<一个月
选择s.ToList();
您必须这样做,因为AddMonth是一个.NET函数,不能通过LINQtoEntities转换为SQL。在代码中执行计算,然后使用生成的日期时间将起作用。Jon Skeet已经提供了一个简单的修复程序,但是如果您想要
日期时间。现在。AddMonths
位在数据库上运行,请尝试该方法
这是一种更通用的方法,当您无法在客户端上廉价或正确地复制表达式时尤其有用。如果您使用的是DateTime,则这是一种很好的方法。现在。。。但是如果您需要使用s.SuscriptionDateTime中的值加上月份,Ani的答案会更好。@Romias:在这种情况下,它将回答一个不同的问题:)哈哈。。。你是对的。。。我在我的问题中评论了思考:)