我想获取所有尚未结束的事件
select * FROM [Events] where EndDate+cast(EndTo as datetime)>GETDATE()
运作良好。
这是我在(EndTo: 11:00:00.0000000, END DATE: 2016-05-26)中的值
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中编写此查询?
这是因为你尝试添加DateTime有TimeSpan,这是不允许的。为此,请尝试使用类似以下内容的方法DateTime.AddSeconds(TimeSpan.TotalSeconds):
DateTime
TimeSpan
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.EndTo是Nullable<TimeSpan>,因此您应该使用Value:
e.EndTo
Nullable<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();