參考:http://social.msdn.microsoft.com/Forums/zh-CN/a5ae8993-c65a-4dbf-8417-42452c6ed76c/datasetdatatable-net
和http://social.msdn.microsoft.com/Forums/zh-CN/1b0aafdd-2e51-46d5-8e25-87d4866ff4b6/datatable
大部分都是抄的!!
有寫時候,我們已經從資料層得到了一個datatable,現在我們需要對某幾列進行分組,比如對下面學生按照年齡和性別分組:
姓名 年齡 性別 學校
小明 12 男 光明小學
小紅 12 女 光明小學
小米 12 男 黑暗小學
================================================
小明 12 男 光明小學
小米 12 男 黑暗小學
小紅 12 女 光明小學
class Program { static void Main(string[] args) { string connection = "*********** "; SqlConnection cn = new SqlConnection(connection); cn.Open(); string selectCmd = "***************"; DataSet ds = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter(selectCmd, cn); adapter.Fill(ds, "*****"); DataTable mytb = ds.Tables["***"]; List<DataTable> groupsTb = DataTableGroups(new string[] { "你想要的列名", "*****" }, mytb); Console.Read(); }//end main public static void GroupDataRows(IEnumerable<DataRow> source, List<DataTable> destination, string[] groupByFields, int fieldIndex, DataTable schema) { if (fieldIndex >= groupByFields.Length || fieldIndex < 0) { DataTable dt = schema.Clone(); foreach (DataRow row in source) { DataRow dr = dt.NewRow(); dr.ItemArray = row.ItemArray; dt.Rows.Add(dr); } destination.Add(dt); return; } var results = source.GroupBy(o => o[groupByFields[fieldIndex]]); foreach (var rows in results) { GroupDataRows(rows, destination, groupByFields, fieldIndex + 1, schema); } fieldIndex++; } public static List<DataTable> DataTableGroups(string[] fields, DataTable source) { List<DataTable> dts = new List<DataTable>(); GroupDataRows(source.Rows.Cast<DataRow>(),dts,fields,0, source); return dts; } }//end class