gpt4 book ai didi

c# - LINQ Select distinct on DataTable 不工作

转载 作者:行者123 更新时间:2023-11-30 13:38:54 26 4
gpt4 key购买 nike

我有以下数据表 - 假设名为 MyTable:

Col1:    Col2:    Col3:    Col4:
1 abc def <null>
2 abc def ghi
1 abc def <null>
3 abc def <null>
1 abc def <null>

我正在尝试获取不同的行:

Col1:    Col2:    Col3:    Col4:
1 abc def <null>
2 abc def ghi
3 abc def <null>

我尝试了以下 LINQ 语句:

MyTable = (From dr As DataRow In MyTable Select dr).Distinct.CopyToDataTable

但它会将包含重复行的原始数据表返回给我。

我做错了什么以及我怎样才能得到我想要的输出??

最佳答案

Distinct 依赖于所有实现 IEquatable 和/或具有 GetHashCodeEquals 的合理实现的对象。 DataRow 类...没有。它不会在Equals方法中检查每列的值是否相等,它只是使用默认的实现,也就是说它检查引用是否相等,这不是你的意思想要。

您可以提供自己的 IEqualityComparer,因为您无法更改 DataRow 中的方法。

如果您将它的一个实例提供给 Distinct,那么下面应该可以工作:

public class DataRowComparer : IEqualityComparer<DataRow>
{
public bool Equals(DataRow x, DataRow y)
{
for (int i = 0; i < x.Table.Columns.Count; i++)
{
if (!object.Equals(x[i], y[i]))
return false;
}
return true;
}

public int GetHashCode(DataRow obj)
{
unchecked
{
int output = 23;
for (int i = 0; i < obj.Table.Columns.Count; i++)
{
output += 19 * obj[i].GetHashCode();
}
return output;
}
}
}

关于c# - LINQ Select distinct on DataTable 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14165335/

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