DataTable根据类型求和.DataTable Linq
最近在做一个项目时,要写到一个这样的方法。根据一个DataTable。 如果它的其中一列是INT或FLOAT之类的话。则要求合。
下面写一下,
Code
DataTable table = new DataTable();
table.Columns.Add("IntColumn", typeof(int));
table.Columns.Add("StringColumn", typeof(string));
table.Columns.Add("DateTimeColumn", typeof(DateTime));
table.Rows.Add(1, "第1行", DateTime.Now);
table.Rows.Add(2, "第2行", DateTime.Now);
table.Rows.Add(3, "第3行", DateTime.Now);
table.Rows.Add(4, "第4行", DateTime.Now);
table.Rows.Add(5, "第5行", DateTime.Now);
table.Rows.Add(6, "第6行", DateTime.Now);
Dictionary<string, string> numericColumns = new Dictionary<string, string>();
foreach (DataColumn column in table.Columns)
{
if (column.DataType == typeof(int))
{
string sumName = string.Format("Sum({0})", column.ColumnName);
numericColumns.Add(sumName, string.Format("Sum({0})", column.ColumnName));
}
}
foreach (string key in numericColumns.Keys)
{
table.Columns.Add(key, typeof(int), numericColumns[key]);
}
table.AcceptChanges();
//Print Table
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
Console.Write("{0} ", row[column]);
}
Console.Write("\r\n");
}
结果
1 第1行 2009/11/23 10:49:27 21
2 第2行 2009/11/23 10:49:27 21
3 第3行 2009/11/23 10:49:27 21
4 第4行 2009/11/23 10:49:27 21
5 第5行 2009/11/23 10:49:27 21
6 第6行 2009/11/23 10:49:27 21
DataTable table = new DataTable();
table.Columns.Add("IntColumn", typeof(int));
table.Columns.Add("StringColumn", typeof(string));
table.Columns.Add("DateTimeColumn", typeof(DateTime));
table.Rows.Add(1, "第1行", DateTime.Now);
table.Rows.Add(2, "第2行", DateTime.Now);
table.Rows.Add(3, "第3行", DateTime.Now);
table.Rows.Add(4, "第4行", DateTime.Now);
table.Rows.Add(5, "第5行", DateTime.Now);
table.Rows.Add(6, "第6行", DateTime.Now);
Dictionary<string, string> numericColumns = new Dictionary<string, string>();
foreach (DataColumn column in table.Columns)
{
if (column.DataType == typeof(int))
{
string sumName = string.Format("Sum({0})", column.ColumnName);
numericColumns.Add(sumName, string.Format("Sum({0})", column.ColumnName));
}
}
foreach (string key in numericColumns.Keys)
{
table.Columns.Add(key, typeof(int), numericColumns[key]);
}
table.AcceptChanges();
//Print Table
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
Console.Write("{0} ", row[column]);
}
Console.Write("\r\n");
}
结果
1 第1行 2009/11/23 10:49:27 21
2 第2行 2009/11/23 10:49:27 21
3 第3行 2009/11/23 10:49:27 21
4 第4行 2009/11/23 10:49:27 21
5 第5行 2009/11/23 10:49:27 21
6 第6行 2009/11/23 10:49:27 21
今天在写一个DATATABLE时。居然没想到用LINQ。
下面是DataTable的Linq化
Code
IEnumerable <DataRow> rows = dt.Rows.OfType <DataRow>();
rows.GroupBy(a => a["A"].ToString()).Select(a => new
{
A = a.First()["A"].ToString(),
percent = a.Count() / dt.Rows.Count
});
var query = from dt in dv1.Table.AsEnumerable()
group dt by dt.Field <string>("类别");
foreach (var dd in query)
{
combox1.Items.Add(dd.Key);
}
IEnumerable <DataRow> rows = dt.Rows.OfType <DataRow>();
rows.GroupBy(a => a["A"].ToString()).Select(a => new
{
A = a.First()["A"].ToString(),
percent = a.Count() / dt.Rows.Count
});
var query = from dt in dv1.Table.AsEnumerable()
group dt by dt.Field <string>("类别");
foreach (var dd in query)
{
combox1.Items.Add(dd.Key);
}