![](/img/trans.png)
[英]DataTable.Rows.Add() time grows proportionally to DataTable size
[英]DataTable adding rows based on time interval size
我有一個數據表,間隔大小為10
輸入表:
DateTime ChNo Data
--------------------------
6/10 10:10 1 0.1
6/10 10:20 1 0.1
6/10 11:05 2 0.1
6/10 11:06 2 0.1
6/10 11:07 2 0.1
6/10 11:08 2 0.1
6/10 11:09 2 0.1
6/10 11:10 2 0.1
6/10 11:11 2 0.1
6/10 11:12 2 0.1
6/10 11:13 2 0.1
我需要根據間隔大小來轉換上面的表,正如我上面所解釋的,如果間隔大小是10,我的目標表應該像
DateTime ChNo Data
--------------------------
6/10 10:10 1 0.1
6/10 10:20 1 0.1
6/10 11:10 2 0.6 -----> sum of intervals from 11:05 to 11:10
6/10 11:13 2 0.3 -----> sum of intervals from 11:11 to 11:13
使用linqs獲得所需輸出的最佳方法是什么
謝謝,穆拉利。
我還沒有找到Linq解決方案,但是我可以為您提供編程解決方案。 請注意,由於解析而不是沒有年份,因此我使用完整的DateTime表示來進行此操作。 檢查代碼:
//DataTable initialisation
dt = new DataTable();
dt.Columns.Add("Column1");
dt.Columns.Add("Column2");
dt.Columns.Add("Column3");
dt.Rows.Add(new object[] { DateTime.Parse("6/10/2012 10:10"), 1, 0.1 });
dt.Rows.Add(new object[] { DateTime.Parse("6/10/2012 10:20"), 1, 0.1 });
dt.Rows.Add(new object[] { DateTime.Parse("6/10/2012 11:05"), 2, 0.1 });
dt.Rows.Add(new object[] { DateTime.Parse("6/10/2012 11:06"), 2, 0.1 });
dt.Rows.Add(new object[] { DateTime.Parse("6/10/2012 11:07"), 2, 0.1 });
dt.Rows.Add(new object[] { DateTime.Parse("6/10/2012 11:08"), 2, 0.1 });
dt.Rows.Add(new object[] { DateTime.Parse("6/10/2012 11:09"), 2, 0.1 });
dt.Rows.Add(new object[] { DateTime.Parse("6/10/2012 11:10"), 2, 0.1 });
dt.Rows.Add(new object[] { DateTime.Parse("6/10/2012 11:11"), 2, 0.1 });
dt.Rows.Add(new object[] { DateTime.Parse("6/10/2012 11:12"), 2, 0.1 });
dt.Rows.Add(new object[] { DateTime.Parse("6/10/2012 11:13"), 2, 0.1 });
//Method that groups data
void GroupByDate()
{
DateTime startDate = DateTime.Parse(dt.Rows[0].ItemArray[0].ToString());
DateTime endDate = DateTime.Parse(dt.Rows[dt.Rows.Count - 1].ItemArray[0].ToString());
StringBuilder sb = new StringBuilder();
int rowIndex = 0;
for (DateTime d = startDate.AddMinutes(-(startDate.Minute - 1) % 10); rowIndex < dt.Rows.Count && d < endDate.AddMinutes(10 - endDate.Minute % 10); d = d.AddMinutes(10))
{
double sum = 0;
DateTime lastDateInSequence = new DateTime();
for (DateTime md = d;rowIndex < dt.Rows.Count && md < d.AddMinutes(10); md = md.AddMinutes(1))
{
DateTime inbetween = DateTime.Parse(dt.Rows[rowIndex].ItemArray[0].ToString());
if ( inbetween == md)
{
sum += double.Parse(dt.Rows[rowIndex].ItemArray[2].ToString());
lastDateInSequence = md;
rowIndex++;
}
}
if (sum > 0.0)
{
// you can add this results to the new DataTable like dt1.Rows.Add(lastDateInSequence.ToString("dd/MM hh:mm"), dt.Rows[rowIndex - 1].ItemArray[1], sum);
sb.Append(lastDateInSequence.ToString("dd/MM hh:mm") + " " + dt.Rows[rowIndex - 1].ItemArray[1].ToString() + " " + sum.ToString() + Environment.NewLine);
}
}
MessageBox.Show(sb.ToString());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.