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

发布于 2024-11-01 03:35:48 字数 571 浏览 4 评论 0原文

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

目的: 我想检查当前时间(DateTime.Now.ToString()) 是否符合数据库表架构中定义的时间。表的架构定义如下

                          `Name | From | To | JoinedOn |`

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

规格:

.Net Framework 2.0

ViSual studio 2005

Sql server express 2005

Is it possible to get records between a Timespan from a DataTable using the RowFilter property of the Defaultview that belongs to the table.

Purpose:
I would like to check if Current Time(DateTime.Now.ToString()) falls withing the Time defined in the Database table schema. Schema of the table is defined below

                          `Name | From | To | JoinedOn |`

where From To are datetime columns on the database table. I would like to compare only time values from the datetime columns rather than the dates also. I Tried below but doesn't yield the result.
dt_Temp.DefaultView.RowFilter = "From < '"+ DateTime.Now.ToString()+"' AND To >'"+ DateTime.Now.ToString()+"'"; anyone have any idea?

Specs:

.Net Framework 2.0

ViSual studio 2005

Sql server express 2005

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不交电费瞎发啥光 2024-11-08 03:35:48

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

I would skip the DefaultView and write a Linq query agains the DataTable instead

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;

Edit
Here is a 2.0 compatible function of that query

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;
}
玉环 2024-11-08 03:35:48

对我自己的智慧感到惊讶:)下面的 rowfilter 回答了我的查询

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

Astonished by my own intelligence :) the below rowfilter answer my query

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文