返回表中的重复数据行

本文关键字:数据 返回 | 更新日期: 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