Sto scrivendo questo codice. Qui dt è inserito nella funzione, oltre che in qualche modo. La colonna Exp è una colonna di date T-SQL, che viene fornita come DateTime tramite Linq.Come aggiungere giorno fino alla data in Linq a SQL
return (from a in dataContext.TableOfA
where a.name == "Test" &&
a.Exp.Value.AddDays(Convert.ToDouble(Someint)) >= new DateTimeOffset(dt)
select a).First();
In C#, è possibile aggiungere un doppio come un giorno a una data. Significa che puoi aggiungere 1,5 giorni. In T-SQL è possibile aggiungere solo 1 giorno, quindi 12 ore. È necessario aggiungere un valore int per ciascuna parte. Quindi, quando Linq traduce AddDays in T-SQL, converte il mio numero di giorni in millisecondi e li aggiunge. Questo gli permette di dare tutta la precisione che il doppio dà a C#.
Ecco il problema. Quando si arriva a SQL, viene visualizzato l'errore:
The datepart millisecond is not supported by date function dateadd for data type date
Fondamentalmente non è possibile aggiungere millisecondi ad una data. Beh no scherzo. Ma come faccio a ottenere qualcosa che si traduce qui? Voglio aggiungere int giorni a una data. La sola vuole fare questo per aggiungere il loro negativo all'altro con cui sto confrontando? Cosa succede se volevo confrontare le colonne aggiungendole a una?
Aggiornamento 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.
Si prega di notare che sto usando SQL Server 2008. Non è supportato dal tipo di dati DATE. È supportato su datetime.
Un comando come datepart (millisecondo, 10000, myDate) è stato supportato in T-SQL almeno da SQL Server 2000. Questo errore suggerisce che qualsiasi database in uso non supporta la parte della data in millisecondi, il che mi sembra strano . – Keith
Non è supportato nel tipo di dati DATE. È supportato su datetime. –
Questo ha più senso. Bene, se si ha il controllo sulla progettazione del DB, la soluzione semplice sarebbe quella di cambiare questa colonna da un DATE a un DATETIME quindi. Ovviamente, se stai facendo questa domanda, questo non è qualcosa su cui hai il controllo? – Keith