1

多くのイベントファイルからの多くのフィールドを持つデータテーブルがあります。時間通りに区別できるようにする必要があります。日時フィールドはこの形式MM/dd/yyyy HH:mm:ssです..私はこれを試しています:

dpall = RollUpValuesFunctions.jobTableFinalCSVOutput.DefaultView.ToTable();

私が疑問に思っているのは、日時フィールドに制約を適用して、次のような明確な日付のみを取得する方法があるMM/dd/yyyy HH:mmかどうかです。
1分ごとに数百のレコードがありますが、私の目的では、その分のレコードの1つだけが必要です。

そしてこれはC#です

4

1 に答える 1

0

次のデータが与えられます:

var dt = new DataTable();
dt.Columns.Add(new DataColumn("Time", typeof(DateTime)));
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 0, 0));
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 0, 0));
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 0, 1));
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 0, 2));
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 4, 2));
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 5, 5));
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 5, 2));

obvoiusLinqアプローチは

var result = from row in dt.AsEnumerable()
             let d = row.Field<DateTime>("Time")
             group row by new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, 0) into g
             select g.First();

foreach (DataRow row in result)
    Console.WriteLine(row["Time"]);   

しかし、linq以外の解決策を求めたので、各行を繰り返し処理しseconds、時間の一部を取り除き、aを使用してその部分DataViewを実行してみませんか。Distinct

foreach (DataRow row in dt.Rows)
{
    DateTime d = row.Field<DateTime>("Time");
    row["Time"] = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, 0);
    // or use "tricks" like this
    // row["Time"] = d.AddTicks(-(d.Ticks % TimeSpan.TicksPerMinute));
}

foreach(DataRow r in new DataView(dt).ToTable(true).Rows)
    Console.WriteLine(r["Time"]);

を変更したくない場合はDataTable、前にコピーすることができます。

于 2012-08-16T13:09:02.980 に答える