我使用以下函数删除keyField
中名为DataTable
的某个字段的所有重复值。
public DataTable RemoveDuplicates(DataTable dt, string keyField)
{
IEnumerable<DataRow> uniqueContacts = dt.AsEnumerable()
.GroupBy(x => x.Field<string>(keyField))
.Select(g => g.First());
DataTable dtOut = uniqueContacts.CopyToDataTable();
return dtOut;
}
但是,当keyField
的数据类型为Int32
时,这将产生以下异常:
无法将'System.Int32'类型的对象强制转换为'System.String'。
即使keyField
不是string
类型,我如何删除重复的值?
答案 0 :(得分:5)
您可以将方法设为通用:
public DataTable RemoveDuplicates<T>(DataTable dt, string keyField)
{
IEnumerable<DataRow> uniqueContacts = dt.AsEnumerable()
.GroupBy(x => x.Field<T>(keyField))
.Select(g => g.First());
DataTable dtOut = uniqueContacts.CopyToDataTable();
return dtOut;
}
然后调用它指定列类型
RemoveDuplicates<int>(dt, "id");
如果您不知道类型,则另一个选项是使用DataRow
而不是Field
方法的索引器:
public DataTable RemoveDuplicates(DataTable dt, string keyField)
{
IEnumerable<DataRow> uniqueContacts = dt.AsEnumerable()
.GroupBy(x => x[keyField].ToString())
.Select(g => g.First());
DataTable dtOut = uniqueContacts.CopyToDataTable();
return dtOut;
}