Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ返回删除重复项”;删除重复项时出错:无法强制转换类型为';System.Int32';输入';System.String'&引用;_C#_.net_Linq_Datatable - Fatal编程技术网

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;
}