- LINQを使用したグループ化: LINQ(Language-Integrated Query)を使用すると、簡潔かつ柔軟な方法でDataTableの行をグループ化できます。以下は、例です。
using System.Linq;
// DataTableを作成する
DataTable table = new DataTable("SampleTable");
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Category", typeof(string));
table.Columns.Add("Quantity", typeof(int));
// データを追加する
table.Rows.Add("Product A", "Category 1", 10);
table.Rows.Add("Product B", "Category 2", 15);
table.Rows.Add("Product C", "Category 1", 20);
table.Rows.Add("Product D", "Category 2", 5);
// グループ化する
var groupedData = from row in table.AsEnumerable()
group row by row.Field<string>("Category") into grp
select new
{
Category = grp.Key,
TotalQuantity = grp.Sum(r => r.Field<int>("Quantity"))
};
// 結果を表示する
foreach (var group in groupedData)
{
Console.WriteLine($"Category: {group.Category}, Total Quantity: {group.TotalQuantity}");
}
- DataViewを使用したグループ化: DataViewを使用すると、DataTableの行を特定の列でグループ化することができます。以下は、例です。
// DataTableを作成する
DataTable table = new DataTable("SampleTable");
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Category", typeof(string));
table.Columns.Add("Quantity", typeof(int));
// データを追加する
table.Rows.Add("Product A", "Category 1", 10);
table.Rows.Add("Product B", "Category 2", 15);
table.Rows.Add("Product C", "Category 1", 20);
table.Rows.Add("Product D", "Category 2", 5);
// DataViewを作成する
DataView view = new DataView(table);
// グループ化する
view.Sort = "Category ASC";
DataTable groupedTable = view.ToTable(true, "Category", "Quantity");
// 結果を表示する
foreach (DataRow row in groupedTable.Rows)
{
Console.WriteLine($"Category: {row["Category"]}, Total Quantity: {row["Quantity"]}");
}
これらはDataTableの行をグループ化するための一般的なアプローチです。LINQを使用する方法では、より柔軟なクエリを作成できますが、DataViewを使用する方法はシンプルで直感的な操作です。適切な方法を選択して、要件に応じて使用してください。