gpt4 book ai didi

c# - 如何检查数据集中的重复行?

转载 作者:太空宇宙 更新时间:2023-11-03 21:35:09 25 4
gpt4 key购买 nike

enter image description here

我有一个包含重复行的数据集,我希望在存在重复行时执行错误消息。

下面是我的代码,请帮忙

DataSet dsXml = new DataSet();

dsXml.ReadXml(new XmlTextReader(new StringReader(xml)));
Hashtable hTable = new Hashtable();
ArrayList duplicateList = new ArrayList();
foreach (DataRow drow in dsXml.Tables[0].Rows)
{
if (hTable.Contains(drow))
{
duplicateList.Add(drow);
}
else
{
script.Append("alert('Error - There are some Duplicate entries.'); ");
ErrorOcc = true;
if (ErrorOcc)
{
this.ScriptOutput = script + " ValidateBeforeSaving = false;";
this.StayContent = "yes";
return;
}
}
}

最佳答案

您的代码不起作用,因为 DataRow 实例将通过引用进行比较,而不是比较它们的字段。您可以使用自定义比较器:

public class CustomDataRowComparer : IEqualityComparer<DataRow>
{
public bool Equals(DataRow x, DataRow y)
{
if (x.ItemArray.Length != y.ItemArray.Length)
return false;

for (int i = 0; i < x.ItemArray.Length; i++)
if (!x[i].Equals(y[i]))
return false;

return true;
}

public int GetHashCode(DataRow obj)
{
int hash = 17;
foreach (object field in obj.ItemArray)
hash = hash * 19 + field.GetHashCode();

return hash;
}
}

或使用现有的 DataRowComparer它通过使用基于值的比较来比较 DataRow 对象的等价性:

HashSet<DataRow> set = new HashSet<DataRow>(DataRowComparer.Default);
// or: new HashSet<DataRow>(new CustomDataRowComparer());

foreach (DataRow row in dsXml.Tables[0].Rows)
{
if (!set.Add(row))
// duplicate row
}

您还可以使用 Linq to DataSet 查询检查是否存在重复行:

var duplicatedRowsExist = dsXml.Tables[0].AsEnumerable()
.GroupBy(r => r, DataRowComparer.Default)
.Any(g => g.Count() > 1);

关于c# - 如何检查数据集中的重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22197319/

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