1

データテーブルと間隔サイズを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を使用して上記のような目的の出力を取得するための最良の方法は何ですか

ありがとう、ムラリ。

4

1 に答える 1

1

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());
    }
于 2012-11-15T13:39:24.263 に答える