使用DataTable计算列数据总和
大家都知道在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();
}
结语: 目光远大,目标明确的人往往非常自信,而自信与人生的成败息息相关。