ADO.NET: запрос DataTable по таймауту - PullRequest
0 голосов
/ 25 октября 2010

У меня есть DataTable в памяти, который содержит два поля типа DateTime, соответственно LastAction и LastHeartbeat, что означает последний раз, когда объект отправлял сообщение журнала активности, и последний раз, когда объект отправлял биение ( ") сообщение в журнале.

Я создаю метод для запроса таблицы данных по различным критериям, включая «максимальное время бездействия» объекта в системе. Это максимальное время ожидания предназначено для учета как LastAction, так и LastHeartbeat, поэтому запрос будет напоминать что-то вроде (LastAction > Now-timeout || LastHeartbeat > Now-timeout), и пока все в порядке. Значение времени ожидания выражается в целых секундах.

В настоящее время я делаю это в две строки

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)));

где конечный результат будет выглядеть как (LastAction >= #...# OR LastHeartbeat >= #...#) в зависимости от текущего времени выполнения запроса

Мой вопрос: можно ли вычесть дату из запроса ? Существуют ли операторы, чтобы я мог напрямую ввести тайм-аут внутри запроса? В SQL, по крайней мере с MySQL, я мог делать вычитание даты с помощью функции NOW (). Возможно ли это и в ADO.NET? Помните, что это таблица в оперативной памяти для автономного ADO.NET, поскольку данные никоим образом не предназначены для сохранения.

Спасибо

1 Ответ

1 голос
/ 25 октября 2010

Если вы спрашиваете, можете ли вы делать арифметику дат в строке запроса, то нет; Функции фильтрации и запросов, доступные в DataTable и DataView, очень просты. В зависимости от того, что вы делаете, лучше использовать запрос LINQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...