在linq的DATEDIFF(以月为单位)

Dot*_*row 12 linq linq-to-entities entity-framework

select col1,col2,col3 from table1 
where(DATEDIFF(mm, tblAccount.[State Change Date], GETDATE()) <= 4
Run Code Online (Sandbox Code Playgroud)

我想将此SQL查询转换为LINQ.但我不知道LINQ中的任何DateDiff替代品.你能建议我吗?

SLa*_*aks 13

你在找SqlMethods.DateDiffMonth.

编辑:在EF4中,使用SqlFunctions.DateDiff.

  • 那你为什么使用LINQ to SQL标签? (2认同)

Joe*_*l C 8

暂时不考虑原始问题,在查询中使用:

where(DATEDIFF(mm, tblAccount.[State Change Date], GETDATE()) <= 4
Run Code Online (Sandbox Code Playgroud)

此查询将始终导致全表扫描,因为您将函数调用的结果与常量进行比较.如果先计算日期,然后将列值与计算值进行比较会更好,这将允许SQL使用索引查找结果,而不必评估表中的每个记录.

看起来您正在尝试在过去4个月内检索任何内容,因此在您的应用程序代码中,尝试计算您可以先与之进行比较的日期,并将该值传递给您的Linq2Entities表达式:

DateTime earliestDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(-4);
var results = from t in context.table1
              where t.col3 >= earliestDate
              select t;
Run Code Online (Sandbox Code Playgroud)


Tyl*_*the 7

在EF6中,要使用的类是DbFunctions.例如,见DbFunctions.DiffMonths.