2011-04-15 51 views
0

是否有可能使用屬於表的Defaultview的RowFilter屬性從DataTable獲取Timespan之間的記錄。使用Dataview Rowfilter基於時間篩選記錄

目的: 我想檢查是否Current Time(DateTime.Now.ToString())落在withing在數據庫表結構中定義的時間。表的模式定義如下

      `Name | From | To | JoinedOn |` 

其中From To是數據庫表上的datetime列。我想僅比較日期時間列中的時間值,而不是日期。我在下面試過但沒有得出結果。 dt_Temp.DefaultView.RowFilter = "From < '"+ DateTime.Now.ToString()+"' AND To >'"+ DateTime.Now.ToString()+"'";任何人有任何想法?

規格:

.Net框架2.0

Visual Studio 2005中

的SQL Server Express 2005

回答

1

我會跳過默認視圖,寫LINQ查詢agains的數據表,而不是

var time = DateTime.Now.TimeOfDay; 
var q = 
    from row in dt_Temp.AsEnumerable(); 
    where row.Field<DateTime>("From").TimeOfDay < time && row.Field<DateTime>("To").TimeOfDay > time 
    select row; 

編輯 下面是查詢

private static IEnumerable<DataRow> GetRows(DataTable dt_Temp) 
{ 
    TimeSpan time = DateTime.Now.TimeOfDay; 
    foreach (DataRow row in dt_Temp.Rows) 
     if(((DateTime)row["From"]).TimeOfDay < time && ((DateTime)row["To"]).TimeOfDay > time) 
      yield return row; 
} 
+0

@Magnus對不起,我忘了的2.0兼容的功能指定我的框架版本。我使用2.0作爲應用程序。這是客戶的需求所以Linq的方式 – Deeptechtons 2011-04-15 08:50:46

+0

好吧,我認爲我的更新答案應該是2.0兼容。 – Magnus 2011-04-15 09:00:38

+0

@Magnus整潔寫作和IEnumurable的作品魅力,但出於好奇心數據視圖和rowfilter有什麼問題是不是足夠有效? – Deeptechtons 2011-04-15 09:03:39

0

專案組通過我自己的智慧:)下面的RowFilter回答我的查詢

"From <= #" + DateTime.Now.ToString() + "# AND To >#" + DateTime.Now.ToString() + "#";