Фильтрация записей по времени с использованием Dataview Rowfilter - PullRequest
0 голосов
/ 15 апреля 2011

Можно ли получить записи между Timespan из DataTable, используя свойство RowFilter для Defaultview, принадлежащего таблице.

Назначение: Я хотел бы проверить, падает ли Current Time(DateTime.Now.ToString()) в течение времени, определенного в схеме таблицы базы данных. Схема таблицы определена ниже

                          `Name | From | To | JoinedOn |`

где От - столбцы даты и времени в таблице базы данных. Я хотел бы сравнить только значения времени из столбцов даты и времени, а не также даты. Я пробовал ниже, но не дает результата. dt_Temp.DefaultView.RowFilter = "From < '"+ DateTime.Now.ToString()+"' AND To >'"+ DateTime.Now.ToString()+"'"; У кого-нибудь есть идеи?

Технические характеристики:

.Net Framework 2.0

Студия ViSual 2005

SQL Server Express 2005

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Я бы пропустил DefaultView и написал бы запрос Linq против DataTable вместо

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;
}
0 голосов
/ 15 апреля 2011

Удивлен моим собственным умом :) Фильтр строк ниже ответит на мой запрос

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

...