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