2010-10-25 63 views
0

我有一個內存中的數據表,它分別包含DateTime類型的兩個字段LastAction和LastHeartbeat,表示實體發送活動日誌消息的最後一次以及實體最後一次發送的時間心跳(「我還活着」)日誌消息。ADO.NET:在超時時查詢DataTable

我正在構建一個方法來查詢數據表與各種條件,包括系統中實體的「最大非活動時間」。這個最大超時是爲了考慮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中也可以嗎? Kepp記住,這是離線ADO.NET的內存表,因爲數據不會以任何方式持續存在。

謝謝

+0

如果你只是問它是否會起作用,爲什麼不自己嘗試呢?如果你這樣做,它不起作用,告訴是爲什麼,不要問它是否會起作用。 – 2010-10-25 13:09:25

+0

我知道它的工作原理。我想直接從查詢中更明智地做到這一點。很抱歉對於這個誤會 – 2010-10-25 13:27:16

回答

1

如果你所要求的是,如果你能在查詢字符串做日期計算,則沒有; DataTableDataView中的篩選和查詢功能都非常簡單。取決於你在做什麼,你最好使用LINQ查詢來代替。