使用DateDiff与Linq.Dynamic库获取今天的记录

irf*_*csd 7 c# linq entity-framework entity-framework-6

我试图通过MVC 5/Entity Framework 6应用程序中的Linq表达式使用DateDiff SQL语法获取今天添加的所有记录.DateDiff函数抛出运行时错误

实际上我想用以下linq WHERE子句来解析linq动态

.Where(p => DbFunctions.DiffDays(p.added_date, DateTime.Now) == 0)
Run Code Online (Sandbox Code Playgroud)

为了获取今天添加的记录.我正在使用的示例代码如下所示

var _list = new vsk_error_log();
using (var entities = new vskdbEntities())
{
   _list = entities.vsk_error_log
  //.Where("DateDiff(DAY,added_date,getdate())=0")
  .Where(p => DbFunctions.DiffDays(p.added_date, DateTime.Now) == 0)
  .ToList();
}
return _list;
Run Code Online (Sandbox Code Playgroud)

关于Linq.Dynamic表达式 - 如何编写where子句

LINQ中的动态WHERE子句

Ala*_*oud 25

使用 DbFunctions

.Where(p => DbFunctions.DiffDays(p.AddedDate, DateTime.Now) == 0)
Run Code Online (Sandbox Code Playgroud)

编辑:

如果要动态调用它,则需要修改Dynamic LINQ的代码.

  1. 下载包含DynamicLibrary.cs示例项目.该文件位于App_Code文件夹下.
  2. 找到静态定义predefinedTypestypeof(DbFunctions)在最后添加.

现在你可以这样做了:

.Where("DbFunctions.DiffDays(AddedDate, DateTime.Now) = 0")
Run Code Online (Sandbox Code Playgroud)

它将被翻译成这个SQL:

WHERE 0 = (DATEDIFF (day, [Extent1].[AddedDate], SysDateTime()))
Run Code Online (Sandbox Code Playgroud)