DataTable.Compute可以进行聚合函数的操作,在进行DataTable我遇到如标题的错误,在此记录一下。
如下是DataTable.Compute方法的应用通过后面的两个条件把筛选数据的栏位1进行数量相加。
发生标题的原因为:“栏位1”的属性并不是int型,导致不能相加并报错。将栏位调整对应类型成功。链接为在c#调整类型的方法,提供参考。
int nNum = 0;
string sPartNo
object obj = DT.Compute("Sum(栏位1)", "栏位2='123' and 栏位3 = 'T'");
if (obj != null && !string.IsNullOrEmpty(obj.ToString()))
{
nNum = int.Parse(obj.ToString());
}
附带类型调整的方法提供参考:
需要注意的是:修改类型将数据重新写入需要转换为对应类型才能写入。
/// <summary>
/// 修改数据表DataTable某一列的类型和记录值(正确步骤:1.克隆表结构,2.修改列类型,3.修改记录值,4.返回希望的结果)
/// </summary>
/// <param name="argDataTable">数据表DataTable</param>
/// <returns>数据表DataTable</returns>
private static DataTable UpdateDataTable(DataTable argDataTable)
{
DataTable dtResult = new DataTable();
//克隆表结构
dtResult = argDataTable.Clone();
foreach (DataColumn col in dtResult.Columns)
{
if (col.ColumnName == "数量")
{
//修改列类型
col.DataType = typeof(int);
}
if (col.ColumnName == "日期")
{
//修改列类型
col.DataType = typeof(String);
}
}
foreach (DataRow row in argDataTable.Rows)
{
DataRow rowNew = dtResult.NewRow();
rowNew["姓名"] = row["姓名"];
//修改记录值
rowNew["日期"] = Convert.ToDateTime(row["日期"]).ToString("yyyy-MM-dd").ToString();
//修改记录值
rowNew["数量"] = GvNet.Cvt.ToInt16(row["数量"].ToString());
dtResult.Rows.Add(rowNew);
}
return dtResult;
}