返回表中的重复数据行
本文关键字:数据 返回 | 更新日期: 2023-09-27 18:31:35
我是C#的新手(昨天学过),我对以下代码有问题。
我有一个数据表,想要打印重复的行(如果有的话)。这是我的代码:
DataTable myTable = myDataSet.Tables[0];
int row_count = myTable.Rows.Count;
bool duplicate_exist = false;
string message = "";
for (int i = 0; i < row_count; i++)
{
for (int j = i + 1; j < row_count; j++)
{
var array1 = fills.Rows[i].ItemArray;
var array2 = fills.Rows[j].ItemArray;
if (array1.SequenceEqual(array2))
{
duplicate_exist = true;
message += myTable.Rows[i].ItemArray.Cast<string>().ToArray();
message += "'n";
}
}
}
异常发生在 array1.SequenceEqual(array2)
处。
关于如何解决问题的任何建议?
我认为例外是这个message += myTable.Rows[i].ItemArray.Cast<string>().ToArray();
但是,您应该使用LINQ
来解决问题:
//this comparer is used to compare 2 object[]
public class ArrayComparer : IEqualityComparer<object[]> {
public bool Equals(object[] x, object[] y) {
return x.SequenceEqual(y);
}
public int GetHashCode(object[] obj){
return GetHashCode();
}
}
var dup = myTable.AsEnumerable().GroupBy(x => x.ItemArray, new ArrayComparer())
.Where(g=>g.Skip(1).Any())
.Select(g => g.First());
foreach(var d in dup){
message += string.Join(", ", d.ItemArray.Cast<string>()) + "'n";
}
//E.g
//Input
1,2,3
2,3,4
3,4,5
1,2,3
2,3,4
//Output
1,2,3
2,3,4
如果要打印所有重复的行,只需像这样稍微修改查询:
var dup = myTable.AsEnumerable().GroupBy(x => x.ItemArray, new ArrayComparer())
.Where(g=>g.Skip(1).Any())
.SelectMany(g=>g);
//Output
1,2,3
1,2,3
2,3,4
2,3,4