一尘不染

从单独的列中在实体框架中添加日期时间和时间

sql

我想获取所有尚未结束的事件

select * FROM [Events] where EndDate+cast(EndTo as datetime)>GETDATE()

运作良好。

这是我在(EndTo: 11:00:00.0000000, END DATE: 2016-05-26)中的值

我尝试使用

var list = dbContext.Events
                    .Where(e => e.EndDate + e.EndTo > DateTime.Now)
                    .ToList();

我收到一个错误

DbArithmeticExpression参数必须具有数字通用类型。

如何在Entity Framework中编写此查询?


阅读 289

收藏
2021-03-10

共1个答案

一尘不染

这是因为你尝试添加DateTimeTimeSpan,这是不允许的。为此,请尝试使用类似以下内容的方法DateTime.AddSeconds(TimeSpan.TotalSeconds)

var list= dbContext.Events
           .Where(e=>e.EndDate.AddSeconds(e.EndTo.TotalSeconds) > DateTime.Now)
           .ToList();

或如果这是LINQ to Entities:

var list= dbContext.Events
           .Where(e=>EntityFunctions.AddSeconds(e.EndDate, e.EndTo.TotalSeconds) > DateTime.Now)
           .ToList();

编辑:

由于您e.EndToNullable<TimeSpan>,因此您应该使用Value

var list= dbContext.Events
           .Where(e=>e.EndDate.AddSeconds(e.EndTo.Value.TotalSeconds) > DateTime.Now)
           .ToList();

或者

var list= dbContext.Events
           .Where(e=>EntityFunctions.AddSeconds(e.EndDate, e.EndTo.Value.TotalSeconds) > DateTime.Now)
           .ToList();
2021-03-10