数据表 - 从字符串类型列获取最大值(日期)

时间:2013-03-16 11:52:42

标签: datatable

我在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)的最大日期,该日期应为2013年3月13日。另请注意,此列具有字符串数据类型。

拜托,有人可以建议我如何用c#中的“Linq”来做这件事,还是有一种简单的方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

使用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);

答案 1 :(得分:0)

即使程序是由同一家公司制作的,程序之间的格式化也很烦人。这个帖子很相似,希望能指出你正确的方向:

DateTime format mismatch on importing from Excel Sheet

如果你确认它是String,那么你试过一个简单的: DateTime dt = Convert.ToDateTime(date);