2010-10-25 16 views
0

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

+0

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. –

+0

Je sais que cela fonctionne. Je veux le faire plus intelligemment, directement à partir de la requête. Désolé pour le malentendu –

Répondre

1

Si ce que vous demandez est si vous pouvez faire des calculs de dates dans la chaîne de requête, aucune; la fonctionnalité de filtrage et de requête disponible dans les DataTable et DataView sont toutes deux très simples. En fonction de ce que vous faites, vous préférerez peut-être utiliser une requête LINQ.