gpt4 book ai didi

c# - 使用 LINQ 删除重复项会返回 "Error removing duplicates: Unable to cast object of type ' System.Int3 2' to type ' System.String'。”

转载 作者:行者123 更新时间:2023-12-01 19:38:54 26 4
gpt4 key购买 nike

我正在使用以下函数删除 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;
}

但是,当 keyField 的数据类型是 Int32 时,这将产生以下异常:

Unable to cast object of type 'System.Int32' to type 'System.String'.

即使 keyField 不是 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;
}

然后调用它指定列类型

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

关于c# - 使用 LINQ 删除重复项会返回 "Error removing duplicates: Unable to cast object of type ' System.Int3 2' to type ' System.String'。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27844253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com