将SQL转换为带日期的LINQ

本文关键字:日期 LINQ SQL 转换 | 更新日期: 2023-09-27 17:58:35

我正试图将下面的sql命令转换为LINQ,但对用相同的输出转换的可能性感到困惑。

Select * 
  from [A].[dbo].[SOMETABLE] 
 where lossdate >= dateadd(m, datediff(m, 0, GETDATE()) - 1, 0)
   AND lossdate < dateadd(m, datediff(m, 0, GETDATE()), 0)

感谢

将SQL转换为带日期的LINQ

SqlFunctions类具有在查询中使用时可转换为sql server函数的方法。(如果您使用的是.NET 3.5,请使用与实体框架捆绑的此版本)

您的查询将直接转换为

db.SomeTable.Where(x => x.LossDate >= SqlFunctions.DateAdd("m", SqlFunctions.DateDiff("m", "0", SqlFunctions.GetDate()) - 1, 0) && 
                        x.LossDate < SqlFunctions.DateAdd("m", SqlFunctions.DateDiff("m", "0", SqlFunctions.GetDate()), 0));

此外,避免调用这些静态方法的一种方法是通过这种方式获取上下日期:

var end = new DateTime(DateTime.Now.Year,DateTime.Now.Month,1);
var start =DateTime.Now.Month==1? new DateTime(DateTime.Now.Year-1, 12, 1):
                                  new DateTime(DateTime.Now.Year, DateTime.Now.Month-1, 1);
var query= context.SomeDbSet.Where(e=>e.LossDate>=start && e.LossDate<end);