使用DateTime.Add(TimeSpan)和LINQ

我必须运行一个查询,如下图所示。它实际上是比较复杂的,但在这里是重要的部分:使用DateTime.Add(TimeSpan)和LINQ

var results = 

from b in _context.Bookings

where b.ScheduleDate.Add(b.StartTime) >= DateTime.UtcNow

select b;

但它提供了以下错误:

LINQ to Entities does not recognize the method 'System.DateTime.Add method(System.TimeSpan)', and this method cannot be translated into a store expression.

我如何解决此问题?

在此先感谢。

回答:

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

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

你的另一种选择是执行LINQ实体查询(使用ToList或类似的东西),然后在存储器中执行的逻辑。

回答:

SqlFunctions只适用于Microsoft SQL Server中。

在纯EF你可以写:

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

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

以上是 使用DateTime.Add(TimeSpan)和LINQ 的全部内容, 来源链接: utcz.com/qa/264835.html

回到顶部