使用Dataview Rowfilter根据时间筛选记录

本文关键字:时间 筛选 记录 Dataview Rowfilter 使用 | 更新日期: 2023-09-27 17:50:11

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

目的:我想检查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工作室2005

Sql server express 2005

使用Dataview Rowfilter根据时间筛选记录

我会跳过DefaultView,在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;
}

我自己的智慧让我大吃一惊:(下面的行过滤器回答了我的查询

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