Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于检测重复行的查询_C#_.net_Linq_Duplicates - Fatal编程技术网

C# 用于检测重复行的查询

C# 用于检测重复行的查询,c#,.net,linq,duplicates,C#,.net,Linq,Duplicates,我使用c#将XML文件中的数据读入数据集,然后我想识别该集中的重复(完全相同)行。 我尝试过这样的分组,效果很好 var d= from r1 in table.AsEnumerable() group r1 by new { t0 = r1[0], t1 = r1[1], t2 = r1[2], t3 = r1[3], t4 = r1[4],

我使用c#将XML文件中的数据读入数据集,然后我想识别该集中的重复(完全相同)行。 我尝试过这样的分组,效果很好

var d= from r1 in table.AsEnumerable()
       group r1 by new
       {
            t0 = r1[0],
            t1 = r1[1],
            t2 = r1[2],
            t3 = r1[3],
            t4 = r1[4],
            t5 = r1[5],
            t6 = r1[6],
            t7 = r1[7],
            t8 = r1[8],
       }
       into grp
       where grp.Count() > 1
       select grp;
但是数据列的数量可能不同,所以我不能在上面的查询中应用静态分组。我必须动态生成分组数组

我不想删除dublicate,我只想找到它们

试试这个

var rows = table.AsEnumerable();
var unique = rows.Distinct(DataRowComparer.Default);
var duplicates = rows.Except(unique); // , DataRowComparer.Default);
DataTable dt = TableName;
dt = oPerformance.RemoveDuplicateRows(dt, ColToCompareAndRemove);
下面是RemovedUpplicateRows函数

public DataTable RemoveDuplicateRows(DataTable dTable, string colName)
        {
            Hashtable hTable = new Hashtable();
            ArrayList duplicateList = new ArrayList();

            //Add list of all the unique item value to hashtable, which stores combination of key, value pair.
            //And add duplicate item value in arraylist.
            foreach (DataRow drow in dTable.Rows)
            {
                if (hTable.Contains(drow[colName]))
                    duplicateList.Add(drow);
                else
                    hTable.Add(drow[colName], string.Empty);
            }

            //Removing a list of duplicate items from datatable.
            foreach (DataRow dRow in duplicateList)
                dTable.Rows.Remove(dRow);

            //Datatable which contains unique records will be return as output.
            return dTable;
        }

您要寻找的是一种比较实例所有属性的方法。这可能会有帮助:没有主键!使用
列表
字典
。你知道泛型的好处吗?@CuongLe:这不会使用比较所有行的列的
EqualityComparer.Default
过滤掉重复的行吗?不会,DataRow不像匿名类,不是结构化的type@CuongLe:好的,使用
DataRowComparer。然后使用默认值
duplicates
集合始终为空,因为用于检测重复的同一个比较器会删除该重复行的所有事件(而不仅仅是第一个)。