Linq按日期比较问题

本文关键字:问题 比较 日期 Linq | 更新日期: 2023-09-27 17:50:16

我的代码在这里

VisitorLog log = db.Context.VisitorLogs
         .Where(vl=>vl.inDate.Date == DateTime.Now.Date).FirstOrDefault();

这个错误显示

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported

如何在LINQ中只比较日期(skip time) ?

正确答案

var currentDate = DateTime.Now;
VisitorLog log = db.Context.VisitorLogs
.Where(vl => EntityFunctions.DiffDays(vl.inDate, currentDate) == 0).FirstOrDefault();

谢谢你的回答

Linq按日期比较问题

您应该使用实体规范函数,请参阅此,对于所有规范函数,请参阅此。您可以使用日、年和月来解决您的问题。

不如这样做,

var currentDate = DateTime.Now.Date;
VisitorLog log = db.Context.VisitorLogs
         .Where(vl=>vl.inDate.Date == currentDate).FirstOrDefault();

但是如果vl.inDate.Date包含时间,这可能会很棘手,但它不会出错,只是可能没有匹配

编辑:

既然没有工作,你能在

周围尝试这个工作吗?
var currentDate = DateTime.Now.Date;
var timeIn24HrsTime = DateTime.Now.AddDays(1).Date;
VisitorLog log = db.Context.VisitorLogs
         .Where(vl=>vl.inDate >= currentDate && vl.inDate < timeIn24HrsTime).FirstOrDefault();

你也可以试试这个:

context.Products.Where(x=> (
       EntityFunctions.TruncateTime(x.CreatedDate) >=
       EntityFunctions.TruncateTime(startdate))
    && (EntityFunctions.TruncateTime(x.CreatedDate) <=
       EntityFunctions.TruncateTime(enddate)))

根据您的要求你应该试试:

var currentDate = DateTime.Now;
VisitorLog log = db.Context.VisitorLogs.Where(vl =>
   EntityFunctions.DiffDays(EntityFunctions.TruncateTime(vl.inDate),
   EntityFunctions.TruncateTime(currentDate)) == 0).FirstOrDefault();

Try

vl.inDate.Date.Equals(DateTime.Now.Date)