最近用DataTable用得的确有点多,开始的想法是用Linq对datatable进行 处理,进行一下总结:
1.只显示datatable其中需要的几列字段
DataTable yl_dt = new DataTable();
DataColumn dc0 = new DataColumn("卡号");
DataColumn dc1 = new DataColumn("空");
yl_dt.(dc0);
yl_dt.(dc1);
中某个字段的求和
1. 列为数字类型
double total= (("SUM(需要求和的参数)", ""));
2.列为string 类型 先转为数字类型 再求和
double total= ().Select(d => (<string>("amount"))).Sum();
根据条件进行查询
/// <summary>
/// dataTable根据条件查询
/// </summary>
/// <param name="dt">数据源</param>
/// <param name="name">查询字段</param>
/// <param name="value">查询条件值</param>
/// <returns></returns>
public DataTable ConditionQuery(DataTable dt, string name, string value)
{
//根据条件查询
DataRow[] dr = (name + " = '" + value + "'");
DataTable dt1 = ();
for (int i = 0; i < ; i++)
{
(dr[i]);
}
return dt1;
}
/// <summary>
/// dataTable过滤筛选条件
/// </summary>
/// <param name="dt"></param>
/// <param name="name"></param>
/// <param name="value"></param>
public DataTable ConditionQuery(DataTable dt, string name, string value)
{
DataView dataview = new DataView(dt);
= $"{name} like'%{value}%'";
return GetDataTable(dataview);
}
/// <summary>
/// 将DataView转化为DataTable
/// </summary>
/// <param name="obDataView"></param>
/// <returns></returns>
public DataTable GetDataTable(DataView obDataView)
{
DataTable obNewDt = ();
int idx = 0;
string[] strColNames = new string[];
foreach (DataColumn col in )
{
strColNames[idx++] = ;
}
IEnumerator viewEnumerator = ();
while (())
{
DataRowView drv = (DataRowView);
DataRow dr = ();
try
{
foreach (string strName in strColNames)
{
dr[strName] = drv[strName];
}
}
catch (Exception ex)
{
();
}
(dr);
}
return obNewDt;
}
4.清除datatable中数据某字段相同的数据
/// <summary>
/// 清除重复字段
/// </summary>
/// <param name="dt">数据源</param>
/// <param name="name">字段名</param>
/// <returns></returns>
public DataTable RefundDataExit(DataTable dt, string name)
{
for (int i = 0; i < ; i++)
{
string dr = [i][name].ToString();
for (int j = i + 1; j < ; j++)
{
string dr1 = [j][name].ToString();
if (dr == dr1)
{
(i);
(j - 1);
if (i == 0)
{
i = -1;
}
}
}
}
return dt;
}
如果大家有更好的方法,或者对datatable操作有其他的方法,欢迎指教