LINQ to Entitys-比较日期

本文关键字:日期 比较 Entitys- to LINQ | 更新日期: 2023-09-27 17:59:47

有更好(更好/更高效)的方法吗?

return View(db.Things
    .Where(t => t.DateTimeObj.Month == DateTime.Today.Month 
        && t.DateTimeObj.Day == DateTime.Today.Day)
    .OrderByDescending(e => e.DateTimeObj)
    .Take(num)
);

以下操作不起作用(LINQ to Entites中没有Date对象)。

今日记录:

return View(db.Things
    .Where(t => t.DateTimeObj.Date == DateTime.Today)
    .OrderByDescending(e => e.DateTimeObj)
    .Take(num)
);

最近24小时记录:

return View(db.Things
    .Where(t => t.DateTimeObj > DateTime.Today.AddHours(-24))
    .OrderByDescending(e => e.DateTimeObj)
    .Take(num)
);

编辑:

这似乎奏效了:

return View(db.Things
    .Where(t => t.DateTimeObj > SqlFunctions.DateAdd("dd", -1, DateTime.Now))
    .OrderByDescending(e => e.DateTimeObj)
    .Take(num)
);

Chris Sainty指出的可能的问题:

  1. 仅SQL Server(可能是?)
  2. 与在linq2sql翻译中提供预先计算的日期相反,日期计算被推迟到SQL Server执行

LINQ to Entitys-比较日期

看看msdn上的SqlFunctions类,它提供了对sql-datediff等函数的访问。

请注意,它们不能用于运行C#中的代码,它们只是查询解析器理解的占位符,并且可以转换为T-SQL。显然,这只是SQL Server,除非其他提供程序已经包装了这些函数。

只需在提交之前声明您的"比较日期"

var today = DateTime.Today;
return View(db.Things
    .Where(t => t.DateTimeObj.Date == today)
    .OrderByDescending(e => e.DateTimeObj)
    .Take(num)
);
//Last 24 hours records:
var yesterday = DateTime.Now.AddDays(-1);
return View(db.Things
    .Where(t => t.DateTimeObj > yesterday)
    .OrderByDescending(e => e.DateTimeObj)
    .Take(num)
);