
public class TableHelper { public static DataTable CreateTableFromClass(Type t) { DataTable dt = new DataTable(); PropertyInfo[] pis = t.GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public); int colNum = t.GetProperties().Count(); for (int c = 0; c < colNum; c++) { dt.Columns.Add(pis[c].Name, typeof(string)); } return dt; } public static DataTable ConvertListToTable<T>(List<T> stores, DataTable dt) where T : class { Type objType = typeof(T); int colNum = objType.GetProperties().Count(); DataColumnCollection cols = dt.Columns; if (stores.Count > 0) { for (int r = 0; r < stores.Count; r++) { var store = stores[r]; DataRow dr = dt.NewRow(); for (int c = 0; c < colNum; c++) { PropertyInfo pi = objType.GetProperty(cols[c].ColumnName, BindingFlags.Public | BindingFlags.Instance); object value = pi.GetValue(store, null); dr[c] = value; } dt.Rows.Add(dr); } } return dt; } }

使用linq to DataTable group by实现 var query = from t in dt.AsEnumerable() group t by new { t1 = t.Field<string>("name"), t2 = t.Field<string>("sex") } into m select new { name = m.Key.t1, sex = m.Key.t2, score = m.Sum(n => n.Field<decimal>("score")) }; if (query.ToList().Count > 0) { query.ToList().ForEach(q => { Console.WriteLine(q.name + "," + q.sex + "," + q.score); }); }

public static T PostDataToModel(HttpContext context,T model) { Type t = model.GetType(); PropertyInfo[] pis = t.GetProperties(); foreach (PropertyInfo pi in pis) { if (!string.IsNullOrEmpty(context.Request.Form[pi.Name])) { pi.SetValue(model, Convert.ChangeType(context.Request.Form[pi.Name], pi.PropertyType)); } } return model; }

public DataTable ConvertListToTable<T>(List<T> stores) where T : class { Type objType = typeof(T); DataTable dt = CreateTableFromClass(objType); int colNum = objType.GetProperties().Count(); DataColumnCollection cols = dt.Columns; if (stores.Count > 0) { for (int r = 0; r < stores.Count; r++) { var store = stores[r]; DataRow dr = dt.NewRow(); for (int c = 0; c < colNum; c++) { PropertyInfo pi = objType.GetProperty(cols[c].ColumnName, BindingFlags.Public | BindingFlags.Instance); object value = pi.GetValue(store, null); dr[c] = value; } dt.Rows.Add(dr); } } return dt; }