在LINQ中使用DateTime.Add(TimeSpan)

Phi*_*ana 3 c# linq linq-to-entities

我必须像下面那样运行一个查询.它实际上更复杂,但这是重要的部分:

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

但它给出了以下错误:

LINQ to Entities无法识别方法'System.DateTime.Add方法(System.TimeSpan)',并且此方法无法转换为商店表达式.

我该如何解决这个问题?

提前致谢.

Ben*_*ich 6

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

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

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


Raf*_*ael 6

SqlFunctions 仅适用于Microsoft Sql Server.

在纯EF中你可以写:

DbFunctions.AddMilliseconds(x.Date, DbFunctions.DiffMilliseconds(TimeSpan.Zero, x.Time))
Run Code Online (Sandbox Code Playgroud)

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