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

问题描述:

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

I want to get all the events which are not ended yet

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参数必须具有数字公用类型。

DbArithmeticExpression arguments must have a numeric common type.

如何在实体框架中编写此查询?

How can I write this query in Entity Framework?

这是因为您尝试将 DateTime 添加到 TimeSpan ,这是不允许的。为此,请尝试使用类似 DateTime.AddSeconds(TimeSpan.TotalSeconds)的东西:

This is because you try to add DateTime with TimeSpan, which is not allowed. To do that, try to use something like DateTime.AddSeconds(TimeSpan.TotalSeconds) instead:

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

或者如果这是对实体的LINQ:

Or if this is LINQ to Entities:

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

编辑:

由于您的 e.EndTo Nullable< TimeSpan> ,因此您应该使用其

Since your e.EndTo is a Nullable<TimeSpan>, then you should use its 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();