3

我必须运行如下查询。它实际上更复杂,但这里是重要的部分:

var results =
    from b in _context.Bookings
    where b.ScheduleDate.Add(b.StartTime) >= DateTime.UtcNow
    select b;

但它给出了以下错误:

LINQ to Entities 无法识别方法“System.DateTime.Add method(System.TimeSpan)”,并且该方法无法转换为存储表达式。

我该如何解决这个问题?

提前致谢。

4

2 回答 2

7

尝试使用命名空间SqlFunctions.DateAdd中的方法System.Data.Objects.SqlClient。文档在这里。这将转换为 SQL 方法DateAdd在此处记录。您可能也有兴趣使用DateDiff,记录在这里

通常,请查看SqlFunctions以了解“在 LINQ to Entities 查询中调用数据库中函数的公共语言运行时 (CLR) 方法”。LINQ to Entities 无法将任何方法调用转换为 SQL,但该类中的函数将起作用。

您的另一个选择是执行 LINQ to Entities 查询(使用ToList或类似的东西),然后在内存中执行逻辑。

于 2013-05-27T23:11:33.830 回答
7

SqlFunctions仅适用于 Microsoft Sql Server。

在纯 EF 中,您可以编写:

DbFunctions.AddMilliseconds(x.Date, DbFunctions.DiffMilliseconds(TimeSpan.Zero, x.Time))

这适用于所有数据库适配器

于 2015-12-17T23:16:17.200 回答