C# 如何将年份添加到LINQ到实体查询?

C# 如何将年份添加到LINQ到实体查询?,c#,sql,asp.net-mvc,linq,C#,Sql,Asp.net Mvc,Linq,我试图使用LINQtoEntities在SQL中查询一个表,并在日期列中添加一年 我尝试了以下查询: data = data.Where(x => x.DueDate.Value.AddYears(1) >= DateTime.Now); 执行此操作时,我会收到以下错误消息: LINQ to Entities无法识别方法“System.DateTime AddYears(Int32)”方法,并且无法将此方法转换为存储表达式 我做了一些研究,似乎大多数人通过分离查询并使用一个变量(然

我试图使用LINQtoEntities在SQL中查询一个表,并在日期列中添加一年

我尝试了以下查询:

data = data.Where(x => x.DueDate.Value.AddYears(1) >= DateTime.Now);
执行此操作时,我会收到以下错误消息:

LINQ to Entities无法识别方法“System.DateTime AddYears(Int32)”方法,并且无法将此方法转换为存储表达式

我做了一些研究,似乎大多数人通过分离查询并使用一个变量(然后输入到表达式中)来解决这个问题

我不能这样做,因为我需要将年份添加到我的数据lambda表达式中,并且不能将它们分开

有没有一种简单的方法可以解决这个问题,或者有没有一种方法可以创建一个伪列来添加一年,而不实际创建一个表列?我试图避免仅仅为了在显示的日期上添加一年而创建一个完整的新SQL列


谢谢您的帮助。

您可以做相反的操作,从
日期时间中减去1年。现在
将其用作比较值

var yearAgo = DateTime.Now.AddYears(-1); 
data = data.Where(x => x.DueDate >= yearAgo);
旁注
  • 比较值具有时间分量,但基于持久值的命名,
    DueDate
    可能没有时间分量。您可以使用
    .Date
    DateTime.Now.Date.AddYears(-1);
    )或
    .Today
    而不是
    .Now
    DateTime.Today.AddYears(-1);
    )删除时间组件
  • 如果在不同的时区工作,您将需要一个更健壮的解决方案。我推荐乔恩·斯基特的作品

  • 这很有效,谢谢!