将DataTable按某列分组,效果如下图
测试数据
核心代码如下

测试数据
private DataTable InitData() { DataTable dataTable = new DataTable(); dataTable.Columns.Add(new DataColumn("id")); dataTable.Columns.Add(new DataColumn("QQ")); dataTable.Columns.Add(new DataColumn("name")); dataTable.Columns.Add(new DataColumn("area")); dataTable.Columns.Add(new DataColumn("Remarks")); DataRow dr1 = dataTable.NewRow(); dr1["id"] = 1; dr1["QQ"] = "78630559"; dr1["name"] = "罗分明"; dr1["area"] = "广东"; dr1["Remarks"] = "www.luofenming.com"; dataTable.Rows.Add(dr1); DataRow dr2 = dataTable.NewRow(); dr2["id"] = 2; dr2["QQ"] = "2334160"; dr2["name"] = "lqwvje"; dr2["area"] = "江西"; dr2["Remarks"] = "www.995w.com"; dataTable.Rows.Add(dr2); DataRow dr3 = dataTable.NewRow(); dr3["id"] = 3; dr3["QQ"] = "888888"; dr3["name"] = "8888"; dr3["area"] = "广东"; dr3["Remarks"] = "8888"; dataTable.Rows.Add(dr3); DataRow dr4 = dataTable.NewRow(); dr4["id"] = 4; dr4["QQ"] = "12345"; dr4["name"] = "123"; dr4["area"] = "广东"; dr4["Remarks"] = "123"; dataTable.Rows.Add(dr4); DataRow dr5 = dataTable.NewRow(); dr5["id"] = 5; dr5["QQ"] = "9999"; dr5["name"] = "999"; dr5["area"] = "江西"; dr5["Remarks"] = "999"; dataTable.Rows.Add(dr5); DataRow dr6 = dataTable.NewRow(); dr6["id"] = 6; dr6["QQ"] = "5555"; dr6["name"] = "555"; dr6["area"] = "浙江"; dr6["Remarks"] = "55"; dataTable.Rows.Add(dr6); return dataTable; }
核心代码如下
DataTable dt = InitData(); IEnumerable<IGrouping<string, DataRow>> result = dt.Rows.Cast<DataRow>().GroupBy<DataRow, string>(dr => dr["area"].ToString()); if (result != null && result.Count() > 0) { foreach (IGrouping<string, DataRow> rows in result) { DataTable dataTable = rows.ToArray().CopyToDataTable(); } }