У меня есть объект со свойством TimeSpan
(Start
) и свойством int
(Duration
in minutes ).
Я хочу выполнить запрос linq, который извлечет все строки, относящиеся к следующей логике:
Start <= DateTime.Now <= Start + Duration
Мой LINQ
from n in _context.Notifications
where n.Start <= DateTime.Now.TimeOfDay && DateTime.Now.TimeOfDay <= n.Start.Add(new TimeSpan(0, n.Duration, 0))
select n;
переводится в (как взято из SQL Server Profiler)
SELECT [n].[Id], [n].[Active], [n].[Created], [n].[Day], [n].[Duration], [n].[Name], [n].[Start], [n].[Type]
FROM [Notifications] AS [n]
WHERE [n].[Start] <= CAST(GETDATE() AS time)
Предупреждение, которое я получаю от EntityFramework Core:
Microsoft.EntityFrameworkCore.Query: Предупреждение: выражение LINQ 'где
(DateTime.Now.TimeOfDay <= [n] .Start.Add (new TimeSpan (0, [n] .Duration, 0))) '> не удалось перевести и будет оцениваться локально.
SQL-запрос, который мне нужен, это
SELECT [n].[Id], [n].[Active], [n].[Created], [n].[Day], [n].[Duration], [n].[Name], [n].[Start], [n].[Type]
FROM [Notifications] AS [n]
WHERE CAST(GETDATE() AS TIME) BETWEEN [n].[Start] AND DATEADD(MINUTE, [n].[Duration], [n].[Start])