大家都知道在DataTable中是可以去计算某列数据的总和的,但是在不改变本表数据类型和sql语句的情况下,要计算列的数据类型为string时,应该怎么操作呢?下面给大家带来一个笨方法,欢迎吐槽!
static void Main(string[] args) { //初始化一个DataTable DataTable dataTable = new DataTable(); dataTable.Columns.Add("id", typeof(string)); dataTable.Columns.Add("name", typeof(string)); dataTable.Columns.Add("money", typeof(string)); dataTable.Columns.Add("date", typeof(string)); for (int i = 0; i < 1000; i++) { DataRow dtRow = dataTable.NewRow(); dtRow["id"] = (i + 1) + ""; dtRow["name"] = "第" + (i + 1) + "的姓名"; dtRow["money"] = new Random().Next(100, 100000) + ""; dtRow["date"] = DateTime.Now.ToString("ffffff"); dataTable.Rows.Add(dtRow); } //创建一个新的DataTable,用来将原DataTable的数据进行复制 DataTable copyDt = new DataTable(); //给表格添加列,及列对应的数据类型 foreach (DataColumn item in dataTable.Columns) { if (item.ColumnName.Equals("name") || item.ColumnName.Equals("date")) { copyDt.Columns.Add(item.ColumnName, typeof(string)); } else { copyDt.Columns.Add(item.ColumnName, typeof(int)); } } //将原DataTable中的数据添加到新的表格中去,并进行数据转换(注意,如果用的是浮点型数据类型的话,在创建新的表格列的时候修改对应的数据类型,此处我用的是int类型作为示例) foreach (DataRow dtRow in dataTable.Rows) { DataRow new_dtRow = copyDt.NewRow(); foreach (DataColumn item in copyDt.Columns) { if (item.DataType.Name.Equals("String")) { new_dtRow[item.ColumnName] = dtRow[item.ColumnName].ToString(); } else if (item.DataType.Name.Equals("Int32")) { new_dtRow[item.ColumnName] = Convert.ToInt32(dtRow[item.ColumnName].ToString()); } } copyDt.Rows.Add(new_dtRow); } //计算指定列数据的总和 var moneyCount = copyDt.AsEnumerable().Select(d => Convert.ToDouble(d.Field<Int32>("money"))).Sum(); Console.ReadKey(); } 结语: 目光远大,目标明确的人往往非常自信,而自信与人生的成败息息相关。