Я пишу этот код. Здесь dt является вводом в функцию, а также someint. Столбец 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();
В C # вы можете добавить двойное число как день к дате. Это означает, что вы можете добавить 1,5 дня. В T-SQL вы можете добавить только 1 день, затем 12 часов. Вы должны добавить int для каждой части. Поэтому, когда Linq переводит AddDays в T-SQL, он преобразует мое количество дней в миллисекунды и добавляет их. Это позволяет ему дать всю точность, которую двойник дает C #.
Вот руб. Когда это попадает в SQL, я получаю ошибку:
Datepart миллисекунда не
поддерживается функцией даты dateadd для
тип данных дата
Как правило, вы не можете добавлять миллисекунды к дате. Ну, не шучу. Но как мне получить то, что здесь переводится? Я хочу добавить int дней к дате. Единственное, что нужно сделать, чтобы добавить их негатив к другому парню, с которым я сравниваю? Что если я хочу сравнить столбцы при добавлении к одному?
Обновление 1
Кит писал: «Команда вроде
datepart (миллисекунда, 10000, myDate)
поддерживается в T-SQL с
минимум SQL Server 2000. Эта ошибка
предполагает, что любая база данных вы
используете не поддерживает
миллисекундная часть даты, которая кажется
странно для меня.
Обратите внимание, что я использую SQL Server 2008. Он не поддерживается типом данных DATE. Поддерживается в datetime.