使用Dataview Rowfilter根据时间过滤记录

时间:2011-04-15 08:36:43

标签: c# asp.net sql dataview rowfilter

是否可以使用属于该表的Defaultview的RowFilter属性从DataTable获取Timespan之间的记录。

目的: 我想检查Current Time(DateTime.Now.ToString())是否符合数据库表模式中定义的时间。该表的模式定义如下

                          `Name | From | To | JoinedOn |`

其中From To是数据库表上的datetime列。我想只比较日期时间列的时间值而不是日期。我在下面尝试但没有产生结果。 dt_Temp.DefaultView.RowFilter = "From < '"+ DateTime.Now.ToString()+"' AND To >'"+ DateTime.Now.ToString()+"'";有人有任何想法吗?

功能

.Net Framework 2.0

ViSual studio 2005

Sql server express 2005

2 个答案:

答案 0 :(得分:1)

我会跳过默认视图并针对DataTable编写Linq查询

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;

修改 这是该查询的2.0兼容功能

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

答案 1 :(得分:0)

我自己的智慧感到惊讶:)下面的rowfilter回答了我的问题

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