我必须像下面那样运行一个查询。它实际上更复杂,但这是重要的部分:
var results =
from b in _context.Bookings
where b.ScheduleDate.Add(b.StartTime) >= DateTime.UtcNow
select b;
但它会出现以下错误:
LINQ to Entities无法识别方法'System.DateTime.Add 方法(System.TimeSpan)',并且此方法无法转换为 商店表达。
我该如何解决这个问题?
提前致谢。
答案 0 :(得分:6)
尝试使用SqlFunctions.DateAdd
命名空间中的System.Data.Objects.SqlClient
方法。文档here。这将转换为SQL方法DateAdd
,记录为here。您可能也有兴趣使用DateDiff
代替,记录here。
通常,请查看SqlFunctions中“在LINQ to Entities查询中调用数据库中的函数的公共语言运行时(CLR)方法”。 LINQ to Entities无法将任何方法调用转换为SQL,但该类中的函数将起作用。
您的另一个选择是执行LINQ to Entities查询(使用ToList
或类似的东西),然后在内存中执行逻辑。
答案 1 :(得分:6)
SqlFunctions
仅适用于Microsoft Sql Server。
在纯EF中你可以写:
DbFunctions.AddMilliseconds(x.Date, DbFunctions.DiffMilliseconds(TimeSpan.Zero, x.Time))
这适用于所有数据库适配器