Следующий код выдает EntityCommandCompilationException
из-за закомментированной строки:
var datePartArg = "dd";
var minutesInStatePerSegment = await db.History_WorkPlaceStates
.Where(x => selector.StartTimeUtc <= x.Started && x.Ended < selector.EndTimeUtc)
.Select(x => new {
start = x.Started,
minutes = x.Minutes,
state = x.State,
})
.GroupBy(x => new {
//This causes an exception:
segment = SqlFunctions.DateDiff(datePartArg, selector.StartTimeUtc, x.start),
state = x.state,
})
.Select(x => new {
state = x.Key.state,
segment = x.Key.segment,
minutes = x.Sum(y => y.minutes),
}).ToListAsync();
Это происходит потому, что DateDiff
в SQL Server может использовать только литеральную строку для своего первого аргумента и не может использоватьпеременная.Entity Framework генерирует переменную в SQL, и мы получаем исключение.
Есть ли способ обойти эту проблему?