J'ai un DataTable en mémoire qui contient deux champs de type DateTime
, respectivement LastAction et LastHeartbeat indiquant la dernière fois qu'une entité a envoyé un message de journal d'activité et la dernière fois que l'entité a envoyé un message de journal de pulsation ("Je suis en vie").ADO.NET: interroger un DataTable sur un délai
Je construis une méthode pour interroger la table de données avec divers critères, y compris le "temps d'inactivité maximum" d'une entité dans le système. Ce délai maximal est censé prendre en compte LastAction et LastHeartbeat, donc la requête ressemblera à quelque chose comme (LastAction > Now-timeout || LastHeartbeat > Now-timeout)
et c'est OK pour l'instant. La valeur du délai d'attente est exprimée en secondes entières.
Actuellement je fais cela en deux lignes
DateTime lastActivity = DateTime.UtcNow.Subtract(TimeSpan.FromSeconds(maxinactivity));
filters.Add(string.Format("({0} >= {2} OR {1} >= {2}}", _colLastAction.ColumnName, _colLastHeartbeat.ColumnName, lastActivity.ToString(CultureInfo.InvariantCulture)));
où le résultat final ressemblera (LastAction >= #...# OR LastHeartbeat >= #...#)
en fonction de l'heure actuelle la requête est exécutée
Ma question est: puis-je faire la soustraction de la date de dans la requête? Est-ce que les opérateurs existent pour que je puisse taper directement le timeout dans la requête? En SQL, au moins avec MySQL, j'étais capable de faire une soustraction de date avec la fonction NOW(). Est-ce possible aussi dans ADO.NET? Gardez à l'esprit qu'il s'agit d'une table en mémoire pour ADO.NET hors connexion, car les données ne sont pas destinées à être conservées de quelque manière que ce soit.
Merci
Si vous demandez simplement si cela fonctionnera, pourquoi ne pas l'essayer vous-même? Si vous l'avez fait et que cela ne fonctionne pas, dites pourquoi, ne demandez pas simplement si cela fonctionnera ou non. –
Je sais que cela fonctionne. Je veux le faire plus intelligemment, directement à partir de la requête. Désolé pour le malentendu –