Как я могу отфильтровать DataColumn по значению TimeSpan?

Программирование на С#.NET. У меня есть DataTable со столбцом с именем Time, который имеет тип System.TimeSpan. Когда я отображаю DataTable в DataGridView, я хочу отфильтровать все записи, в которых не указано время. Я пробовал следующее, но безрезультатно. Вы можете помочь?

DataView myDataView = new DataView(SomeDataTable);
myDataView.RowFilter += "Time >= 1";  // doesn't work
myDataView.RowFilter += "Time >= #00:00:01#";  // doesn't work
myDataView.RowFilter += "Time <> ''";  // doesn't work
myDataView.RowFilter += "Time <> ''";  // doesn't work

person PICyourBrain    schedule 16.09.2010    source источник


Ответы (2)


Я нашел это...

myDataView.RowFilter = "Convert(Time, System.String) <> ''";
person PICyourBrain    schedule 16.09.2010

Если кто-то столкнется с этой надоедливой проблемой, к сожалению, хорошего решения нет. Похоже, фильтр DataTable с System.TimeSpan не работает. Решение, которое я использую, состоит в том, чтобы изменить тип столбца в SQL на NVARCHAR(8) с Time(0) (или что-то еще), а затем вы можете просто применить к нему логику следующим образом:

StringBuilder builder = new();

// IsNull() is my own string extension
if (!ExecutionTimeFrom.IsNull())
{
    builder.Append($"AND TimeStamp >= '{ExecutionTimeFrom}' ");
}
if (!ExecutionTimeTo.IsNull())
{
    builder.Append($"AND TimeStamp <= '{ExecutionTimeTo}' ");
}

После этого преобразовать строку из таблицы sql из hh:mm:ss (10:32:15) обратно в System.TimeSpan так же просто, как:

bool isTimeSpan = TimeSpan.TryParse(TimeFromSql, out TimeSpan time);

Два дня ломаю над этим голову, надеюсь поможет :)

person Yaron    schedule 04.08.2021