c# 对DataTable 进行Group by 汇总
private DataTable CreateSummary(DataTable dt)
{
DataTable DtSum = new DataTable();
//要计算的列不可为空
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i]["VALUE"] = string.IsNullOrEmpty(dt.Rows[i]["VALUE"].ToString()) ? 0 : Convert.ToInt32(dt.Rows[i]["VALUE"].ToString());
}
var dtGroupBySum = dt.AsEnumerable().GroupBy(r => new { WORKDATE = r.Field<string>("WORKDATE"), CATEGORY = r.Field<string>("CATEGORY") }).Select(
g => new
{
WORKDATE = g.Key.WORKDATE,
CATEGORY = g.Key.CATEGORY,
VALUE = g.Sum(r => Convert.ToInt32(r.Field<Double>("VALUE"))),
});
DtSum = AsDataTable(dtGroupBySum);
return DtSum;
}
public static DataTable AsDataTable<T>(IEnumerable<T> data)
{
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
var table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
return table;
}