C# 使用LINQ返回删除重复项”;删除重复项时出错:无法强制转换类型为';System.Int32';输入';System.String'&引用;
我正在使用以下函数删除C# 使用LINQ返回删除重复项”;删除重复项时出错:无法强制转换类型为';System.Int32';输入';System.String'&引用;,c#,.net,linq,datatable,C#,.net,Linq,Datatable,我正在使用以下函数删除DataTable中名为keyField的特定字段的所有重复值 public DataTable RemoveDuplicates(DataTable dt, string keyField) { IEnumerable<DataRow> uniqueContacts = dt.AsEnumerable() .GroupBy(x => x.Field<string>(keyFiel
DataTable
中名为keyField
的特定字段的所有重复值
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;
}
public DataTable RemoveDuplicates(DataTable dt,string keyField)
{
IEnumerable uniqueContacts=dt.AsEnumerable()
.GroupBy(x=>x.Field(keyField))
.选择(g=>g.First());
DataTable dtOut=uniqueContacts.CopyToDataTable();
返回dtOut;
}
但是,当键域的数据类型为Int32
时,将产生以下异常:
无法将“System.Int32”类型的对象强制转换为“System.String”类型
即使键域
不是字符串
类型,我如何删除重复的值?您可以使您的方法通用:
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;
}
您知道调用此方法时的数据类型吗?没错!但我怀疑它不是varchar或integer。
RemoveDuplicates<int>(dt, "id");
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;
}