2014-09-11 3 views
0

У меня есть столбец с датами в моем DataTable с использованием C#. Что-то вроде этого:DataTable RowFilter custom different

2014/06/26 11:23
2014/06/26 11:45 утра
2014/06/26 12:23 утра
2014/06/27 1:30 вечера
2014/06/27 1:50 вечера
2014/06/27 2:30 вечера
2014/06/29 4:00 вечера
2014/06/29 5:30 вечера
2014/06/29 18:15

Если я это сделаю: MyData View.ToTable (true, MyDateField) ... затем я получаю ВСЕ числа, указанные выше, поскольку все они уникальны.

Что я хочу сделать, так это отличать от даты, только полностью игнорируя часть времени.

В результате я ищу для из вышеуказанных дат:

2014/06/26
2014/06/27
2014/06/29

Это должно произойти в моем DataTable для этого проекта. Обычно я делал все это в SQL, прежде чем данные даже попадут в приложение, но здесь у меня нет выбора.

ответ

1

DataView.ToTable(true, "DateColumn") возвращает различные значения DateTime, как и ожидалось.

Чтобы отфильтровать записи на основании части даты вы можете выбрать различные строки из DataTable, как это:

var rows = dt.AsEnumerable().Select(r => ((DateTime)r["DateColumn"]).Date).Distinct(); 

foreach (var row in rows) 
{ 

} 

или

DataTable distinctTable = dt.AsEnumerable() 
         .GroupBy(r => r.Field<DateTime>("DateColumn").Date) 
         .Select(g => g.First()) 
         .CopyToDataTable(); 
+0

Спасибо. Я отметил это как ответ, так как это сработало для меня, хотя обработка потенциальных нулей в linq немного меня поняла. – Nick

1

вы можете сделать

dates.Select(x => new DateTime(x.Year, x.Month, x.Day)).Distinct() 

см демку: https://dotnetfiddle.net/WBvI1c

+1

Или даже 'dates.Select (х => х. Дата) .Distinct() ' – stuartd

+0

OP требует, чтобы фильтр применялся на datatable – Hassan

 Смежные вопросы

  • Нет связанных вопросов^_^