Piszę ten kod. Tutaj dt jest wprowadzane do funkcji, jak również someint. Kolumna Exp jest kolumną z datą T-SQL, która przychodzi jako DateTime przez Linq.Jak dodać dzień na dzień w Linq do SQL
return (from a in dataContext.TableOfA
where a.name == "Test" &&
a.Exp.Value.AddDays(Convert.ToDouble(Someint)) >= new DateTimeOffset(dt)
select a).First();
W języku C# można dodać datę podwójną jako dzień. Oznacza to, że możesz dodać 1,5 dnia. W T-SQL można dodać tylko 1 dzień, a następnie 12 godzin. Musisz dodać int dla każdej części. Więc kiedy Linq tłumaczy AddDays na T-SQL, konwertuje moją liczbę dni na milisekundy i dodaje je. Pozwala to na podanie dokładności, którą podwójny daje C#.
Oto rub. Gdy dojdzie do SQL, pojawia się błąd:
The datepart millisecond is not supported by date function dateadd for data type date
Zasadniczo nie można dodać milisekund do daty. Nie żartuję. Ale jak uzyskać coś, co tutaj tłumaczy? Chcę dodać dni do daty. Czy jedyny chcesz to zrobić, aby dodać negatywny wynik do drugiego faceta, z którym się porównywałem? Co jeśli chciałbym porównać z kolumnami podczas dodawania do jednego?
Aktualizacja 1
Keith wrote, A command like datepart(millisecond, 10000, myDate) has been supported in T-SQL since at least SQL Server 2000. This error suggests that whatever database you are using does not support the millisecond date part, which seems strange to me.
Uwaga używam SQL Server 2008. To nie jest obsługiwana od typu danych DATA. Jest obsługiwany na podstawie datetime.
Polecenie jak DatePart (milisekundy, 10000, MyDate) została poparta w T-SQL, ponieważ co najmniej SQL Server 2000. Błąd ten sugeruje, że cokolwiek w bazie używasz nie obsługuje część datę milisekundy, co wydaje mi się dziwne . – Keith
Nie jest obsługiwany w typie danych DATE. Jest obsługiwany na podstawie datetime. –
To ma więcej sensu. Jeśli masz kontrolę nad projektem DB, prostym rozwiązaniem będzie zmiana tej kolumny z DATE na DATETIME. Oczywiście, jeśli zadajesz to pytanie, to nie jest to coś, nad czym masz kontrolę? – Keith