Я пишу этот код. Здесь dt вводится в функцию, а также некоторую. Столбец Exp является столбцом даты T-SQL, который приходит как DateTime через Linq.
return (from a in dataContext.TableOfA
where a.name == "Test" &&
a.Exp.Value.AddDays(Convert.ToDouble(Someint)) >= new DateTimeOffset(dt)
select a).First();
В С# вы можете добавить двойной день в день к дате. Это означает, что вы можете добавить 1,5 дня. В T-SQL вы можете добавить только 1 день, а затем 12 часов. Вы должны добавить int для каждой части. Поэтому, когда Linq переводит AddDays на T-SQL, он преобразует мое количество дней в миллисекунды и добавляет их. Это позволяет ему дать всю точность, которую double дает С#.
Здесь руб. Когда это добирается до SQL, я получаю сообщение об ошибке:
Датой части миллисекунды не является поддерживается функцией даты dateadd для дата типа данных
В принципе вы не можете добавить миллисекунды к дате. Ну не шучу. Но как мне получить что-то, что переводится здесь? Я хочу добавить int days к дате. Единственное, что нужно сделать, чтобы добавить отрицательный результат к другому парню, с которым я сравниваю? Что делать, если я хотел бы сравнить с столбцами при добавлении к одному?
Обновление 1
Кит написал: Команда вроде datepart (миллисекунда, 10000, myDate) поддерживается в T-SQL, поскольку в меньшей степени SQL Server 2000. Эта ошибка предполагает, что любая база данных используют не поддерживает миллисекундная дата, которая кажется странный для меня.
Обратите внимание, что я использую SQL Server 2008. Он не поддерживается в типе данных DATE. Он поддерживается в datetime.