c# - LINQ to Entities 日期时间比较

标签 c# entity-framework linq datetime

我在比较 LINQ to entities 表达式中的日期时遇到问题。我想检查 DateTime == DateTime - whole day

我想这样做:

 return context.Events.Any(x => 
                            x.UserId == id 
                            && x.Date >= date 
                            && x.Date < date.AddDays(1) 
                            && x.Type == EventType.StartWork);

问题是,由于 AddDays() 方法,上述查询对于 LINQ 不正确。

我试过像下面这样使用 DbFunctions:

return context.Events.Any(x => 
                            x.UserId == id 
                            && x.Date >= date 
                            && x.Date < DbFunctions.AddDays(date, 1) 
                            && x.Type == EventType.StartWork);

还有这个:

  return context.Events.Any(x => 
                                x.UserId == id 
                                && DbFunctions.TruncateTime(date.Date) == date.Date 
                                && x.Type == EventType.StartWork);

这些查询都没有给出预期的结果。

最佳答案

只需创建 2 个日期:

var datePlusOneDay = date.AddDays(1);

return context.Events.Any(x => x.UserId == id 
                         && x.Date >= date 
                         && x.Date < datePlusOneDay 
                         && x.Type == EventType.StartWork);

我也不确定,但问题可能是您的日期不仅可以有日期部分,还可以有时间部分。

因此,为了确保您只选择 DateTime 变量的日期部分,您可以这样做:

date = date.Date;
var datePlusOneDay = date.AddDays(1);

关于c# - LINQ to Entities 日期时间比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38475290/

相关文章:

c# - 如何设置对目录的完全控制?

c# - 使用 ajax 动态加载用户控件并具有 jquery 文档就绪功能

c# - Fluent API - 一对多关系

entity-framework - 删除代码首先迁移并降级到旧状态

c# - 我可以使用 linq 来实现这个 foreach 循环所做的同样的事情吗?

c# - 如何在 Forms.Authentication 和 ReturnUrl 之间插入确认对话框?

c# - .NET Core 项目与 .NET Framework 中为 System.Data.DataTable 生成的 JSON 的变化

java - 如何通过Objectify检索实体原始数据存储Key?

c# - 序列不包含任何元素?

c# - 根据属性名称数组创建对象的子集