使用datatable按日期分组

本文关键字:日期 datatable 使用 | 更新日期: 2023-09-27 18:15:58

我有一个问题,而分组我的数据表,

这是数据,

<>之前日期 位置23/07/2014 10:30近高速公路23/07/2014 11:30靠近高速公路23/07/2014 12:30靠近高速公路2014年7月24日01:00来自德克萨斯州24/07/2014 01:10来自德克萨斯州24/07/2014 01:20来自德克萨斯州24/07/2014 01:30来自德克萨斯州之前

我想根据位置对开始时间、结束时间和持续时间进行分组和操作。

<>之前日期开始时间结束时间持续时间位置23/07/2014 10:30 12:30 2小时00分钟近高速公路2014年7月24日01:00 01:30 00小时30分钟之前

请帮助我提出这个解决方案。

使用datatable按日期分组

我想这应该行得通:

    DataTable dt = new DataTable();
    dt.Columns.AddRange(new DataColumn[] 
    {
        new DataColumn("Date",typeof(DateTime)),
        new DataColumn("Location",typeof(string)),
    });
    dt.Rows.Add(DateTime.ParseExact("23/07/2014 10:30", "dd/MM/yyyy HH:mm", new CultureInfo("fr-fr")), "Near Highway");
    dt.Rows.Add(DateTime.ParseExact("23/07/2014 11:30", "dd/MM/yyyy HH:mm", new CultureInfo("fr-fr")), "Near Highway");
    dt.Rows.Add(DateTime.ParseExact("23/07/2014 12:30", "dd/MM/yyyy HH:mm", new CultureInfo("fr-fr")), "Near Highway");
    dt.Rows.Add(DateTime.ParseExact("24/07/2014 01:00", "dd/MM/yyyy HH:mm", new CultureInfo("fr-fr")), "From Texas");
    dt.Rows.Add(DateTime.ParseExact("24/07/2014 01:10", "dd/MM/yyyy HH:mm", new CultureInfo("fr-fr")), "From Texas");
    dt.Rows.Add(DateTime.ParseExact("24/07/2014 01:20", "dd/MM/yyyy HH:mm", new CultureInfo("fr-fr")), "From Texas");
    dt.Rows.Add(DateTime.ParseExact("24/07/2014 01:30", "dd/MM/yyyy HH:mm", new CultureInfo("fr-fr")), "From Texas");
    DataTable dt2 = new DataTable();
    dt2.Columns.AddRange(new DataColumn[] 
    {
        new DataColumn("Date"),
        new DataColumn("Start time"),
        new DataColumn("End time"),
        new DataColumn("Duration"),
        new DataColumn("Location")
    });
    var groups = dt.AsEnumerable().GroupBy(row => row["Location"]);
    foreach (var group in groups)
    {
        Console.WriteLine(group.Key);
        var groups2 = group.OrderBy(row => row["Date"]).GroupBy(row => Convert.ToDateTime(row["Date"]).ToString("dd/MM/yyyy"));
        foreach (var group2 in groups2)
        {
            Console.WriteLine("'t" + group2.Key);
            var list = group2.ToList();
            var startDate = Convert.ToDateTime(list[0]["Date"]);
            var endDate = Convert.ToDateTime(list[list.Count-1]["Date"]);
            TimeSpan ts = endDate-startDate;
            dt2.Rows.Add(group2.Key, startDate.ToString("HH:mm"), endDate.ToString("HH:mm"), ts.Hours + " hour " + ts.Minutes + " minutes", group.Key);
        }
    }