C#ページの条件に基づいて、データテーブルのデータを1つの行にまとめる必要があります
例えば
この表では、行が異なりますが、最後の3行の日付は同じです。日付で結合するテーブルのデータが必要です
つまり、同じ日付の行では、他の列のデータを下の画像のように追加する必要があります
私のデータテーブルには非常に大量のデータが含まれているので、これをより少ない反復で解決するのに役立ちますか?
これを実現するためにlinqを使用します。状況に合わせて少し変更できる小さなケースを作成しました。
var list = new List<Model>();
list.Add(new Model { Date = DateTime.Now, Total = 3 });
list.Add(new Model { Date = DateTime.Now, Total = 3 });
list.Add(new Model { Date = DateTime.Now, Total = 3 });
var combined = from item in list
group item by new { item.Date, item.Total }
into grouped
select new Model
{
Date = grouped.Key.Date,
Total = grouped.Sum(i => i.Total)
};
これModel
はモデルであり、テーブルに表示されているデータが含まれています。基本的に、あなたはあなたが同じである必要があるすべての分野でグループを作ります。次に、グループ化されたエントリで埋められる新しい`IEnumerable'を作成します。ここでは、グループキーの日付を使用でき、他の値を合計できます。
- 編集
すべてを行として直接に追加するには、次のDataTable
ようにします。
var list = new List<Model>();
list.Add(new Model { Date = DateTime.Today, Total = 3 });
list.Add(new Model { Date = DateTime.Today, Total = 3 });
list.Add(new Model { Date = DateTime.Today, Total = 3 });
var table = new DataTable();
table.Columns.Add("Date");
table.Columns.Add("Total");
foreach (var grouped in from item in list
group item by new { item.Date, item.Total }
into grouped
select grouped)
{
table.Rows.Add(grouped.Key.Date, grouped.Sum(i => i.Total));
}
私はこれを行うことで解決策を得ました。ビョルンのポストは私を助けてくれました。
var drdatedisp = from row in dtfullreport.AsEnumerable()
group row by row.Field<string>("Order_Date") into g
select new
{
Order_Date = g.Key,
totalAmt = g.Sum(a => a.Field<int>("Item_Quantity"))
};
DataTable dtdatedisp = new DataTable();
dtdatedisp.Columns.Add("Order_Date");
dtdatedisp.Columns.Add("Quantity");
dtdatedisp.Rows.Clear();
foreach (var g in drdatedisp)
{
DataRow newRow1 = dtdatedisp.NewRow();
newRow1[0] = g.Order_Date;
newRow1[1] = g.totalAmt;
dtdatedisp.Rows.Add(newRow1);
}
また、変数のデータをデータテーブルに追加しました。