2013-03-16 86 views
0

我有這樣的數據表中的結果在C#
數據表 - 從字符串類型列獲取最大(日)

DAY  Employee Job1 Job2 Job3 
1/1/2012 a 1  1  1 
1/1/2012 b 2  2  2 
1/1/2012 c 2  1  4 
1/1/2012 d 4  2  1 
1/2/2012 a 3  2  5 
1/2/2012 b 2  2  2 
1/2/2012 c 3  3  3 
1/2/2012 d 1  1  1 
1/3/2013 a 5  5  5 
1/3/2013 b 2  2  6 
1/3/2013 c 1  1  1 
3/13/2013 d 2  3  4 
2/1/2013 a 2  2  2 
2/1/2013 b 5  5  2 
2/7/2013 c 2  2  2 
2/5/2013 a 3  3  3 
3/2/2013 b 2  3  3 
2/1/2013 a 4  4  2 

現在我想找到第一列中的最大日期(MM/DD/YYYY),這應該是3/13/2013。另請注意,此列是字符串數據類型。

請問任何人都可以建議我如何在c#中使用「Linq」來做到這一點,或者有沒有簡單的方法來做到這一點?

回答

1

使用DateTime.ParseDateTime.ParseExact將字符串解析爲數據時間。這應該工作:

DateTime maxDate = table.AsEnumerable() 
    .Max(r => DateTime.Parse(r.Field<string>("DAY"))); 

但是,爲什麼它是一個字符串呢?

編輯 您還應該考慮用於創建此字符串的文化。解析字符串時必須再次使用這種文化。

所以這會導致作品不同的文化,但結果是不同的,因爲你可以在這裏看到:

System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US"); 
DateTime maxDate = table.AsEnumerable() 
    .Max(r => DateTime.Parse(r.Field<string>("DAY"))); 
Console.WriteLine(maxDate); 
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE"); // germany 
maxDate = table.AsEnumerable() 
    .Max(r => DateTime.Parse(r.Field<string>("DAY"))); 
Console.WriteLine(maxDate); 
+0

哇蒂姆,你是大師!謝謝,它的工作原理!我從Excel工作表中導出這些數據,導出後,數據表顯示此列爲字符串數據類型。 – user1254053 2013-03-16 12:51:25

+0

您好@tim如果一天的字段爲「2012年4月1日」?最大日期將採取此 – 2013-05-24 06:29:47

+0

@Praveen:那是什麼日期,1月的四月或四月的第一?你試過了嗎?其實我不明白你的問題。 – 2013-05-24 06:41:24

0

即使程序是由同一個公司製作,程序之間的格式化也可能很煩人。這個線程是類似的,希望將指向你在正確的方向:

DateTime format mismatch on importing from Excel Sheet

如果您已確認這是一個String,那麼你嘗試過一個簡單的: DateTime dt = Convert.ToDateTime(date);