0

我是 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)

关于如何解决问题的任何建议?

4

1 回答 1

2

我认为例外是在这个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
于 2013-09-17T02:54:44.393 回答