J'écris ce code. Ici, dt est entré dans la fonction, ainsi que someint. La colonne Exp est une colonne de date T-SQL, qui se présente sous forme de DateTime via Linq.Comment ajouter un jour à jour dans Linq to SQL
return (from a in dataContext.TableOfA
where a.name == "Test" &&
a.Exp.Value.AddDays(Convert.ToDouble(Someint)) >= new DateTimeOffset(dt)
select a).First();
En C#, vous pouvez ajouter un double en tant que jour à une date et heure. Ce qui signifie que vous pouvez ajouter 1,5 jours. Dans T-SQL, vous pouvez seulement ajouter 1 jour, puis 12 heures. Vous devez ajouter un int pour chaque partie. Ainsi, lorsque Linq convertit AddDays en T-SQL, il convertit mon nombre de jours en millisecondes et les ajoute. Cela lui permet de donner toute la précision que le double donne à C#.
Voici le frotter. Lorsque cela arrive à SQL, j'obtiens l'erreur:
The datepart millisecond is not supported by date function dateadd for data type date
Fondamentalement, vous ne pouvez pas ajouter de millisecondes à une date. Eh bien, je ne plaisante pas. Mais comment puis-je obtenir quelque chose qui se traduit ici? Je veux ajouter int jours à une date. Est-ce que le seul vouloir faire cela pour ajouter le négatif d'entre eux à l'autre gars avec qui je compare? Et si je voulais comparer aux colonnes tout en ajoutant à un?
Update 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.
S'il vous plaît noter que je suis en utilisant SQL Server 2008. Il est pas pris en charge sur le type de données DATE. Il est pris en charge sur datetime.
Une commande comme datepart (millisecond, 10000, myDate) a été prise en charge dans T-SQL depuis au moins SQL Server 2000. Cette erreur suggère que la base de données que vous utilisez ne supporte pas la partie milliseconde, ce qui me semble étrange . – Keith
Il n'est pas pris en charge sur le type de données DATE. Il est pris en charge sur datetime. –
Cela a plus de sens. Eh bien, si vous avez le contrôle sur la conception DB, la solution simple serait de changer cette colonne d'un DATE à un DATETIME alors. Évidemment si vous posez cette question cependant, ce n'est pas quelque chose que vous contrôlez? – Keith