是否可以使用属于该表的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
答案 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() + "#";
强>