2014-09-11 39 views
0

我有我的DataTable中使用C#日期列。事情是這樣的:DataTable RowFilter自定義不同

2014年6月26日上午11:23
2014年6月26日11:45 AM
2014年6月26日上午12時23
2014年6月27日下午1時30分
2014年6月27日下午1時五十〇
2014年6月27日下午2點30
2014年6月29日下午4時00分
2014年6月29日05:30下午
2014/08/29 06:15

如果我這樣做:MyData View.ToTable(true,MyDateField)...然後我得到所有上述日期,因爲它們都是唯一的。

我想要做的是獲得截然不同的日期部分完全忽略時間部分。

結果我找上面的日期是:

2014年6月26日
2014年6月27日
2014年6月29日

它發生在我的DataTable中爲這個項目。通常我會在數據甚至到達應用程序之前在SQL中完成所有這些事情,但在這裏我沒有選擇。

回答

1

DataView.ToTable(true, "DateColumn")回報不同DateTime值如預期。

要篩選出的記錄日期部分的基礎上,你可以選擇像這樣從不同的數據錶行:

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 2014-09-16 06:02:45

1

你可以做

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

觀看演示:https://dotnetfiddle.net/WBvI1c

+1

甚至'dates.Select(X => X。日期).Distinct()' – stuartd 2014-09-11 12:17:12

+0

OP要求過濾器應用於數據表 – Hassan 2014-09-11 12:19:02