如何将年份添加到 LINQ to entity 查询?

时间:2021-06-08 13:59:59

标签: c# sql asp.net-mvc linq

我正在尝试使用 LINQ to entity 查询 SQL 中的表并向日期列添加年份。

我尝试了以下查询:

data = data.Where(x => x.DueDate.Value.AddYears(1) >= DateTime.Now);

执行此操作时,我收到以下错误消息:

<块引用>

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

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

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以进行逆运算并从 DateTime.Now 中减去 1 年,并将其用作比较值。

var yearAgo = DateTime.Now.AddYears(-1); 
data = data.Where(x => x.DueDate >= yearAgo);

附注

  1. 比较值具有时间分量,但根据持久值 DueDate 的命名,可能没有时间分量。您可以使用 .Date (DateTime.Now.Date.AddYears(-1);) 或 .Today 而不是 .Now (DateTime.Today.AddYears(-1);) 来移除时间组件。
  2. 如果在不同的时区工作,您将需要更强大的解决方案。我建议您阅读 Jon Skeet 的 Storing UTC Is Not a Silver Bullet
相关问题