在C#中查找具有相同ID的数据行

这是我第一次使用Datarows或表格数据。 考虑到我有一个简单的两列表,其中一个包含ID,另一个包含名称string。 我需要做的是find两个具有相同ID的Datarows,并将这两行传递给另一个函数,我们称之为HandleTheDuplicates

此刻,我正在尝试将以前的ID存储在另一个variables中,并检查它是否与当前ID相匹配,然后将其添加到DataRowtypes的列表中。

 List<DataRow> RowList = new List<DataRow>(); int previous = 0 ; foreach (DataRow rowToMatch in importSetOfTables.Tables["MyTable"].Rows) { int rowID = Convert.ToInt32(rowToMatch["ID"]); if (previous == rowID) { RowList.Add(rowToMatch); } else { RowList.Clear(); } previous = rowID; if(RowList.Count > 1) //in case of a match { HandleTheDuplicates(RowList); } } 

我不知道这是做这种事情的正确方法,还是可以做更简单的事情。

你的代码可以工作,如果你有按IDsorting的数据表。 为了确保在ID字段中设置DataTable.DefaultView.Sort属性,然后使用DataTable.DefaultView创build您的循环

 List<DataRow> RowList = new List<DataRow>(); int previous = 0 ; importSetOfTables.Tables["MyTable"].DefaultView.Sort = "ID"; foreach (DataRowView rw in importSetOfTables.Tables["MyTable"].DefaultView) { int rowID = Convert.ToInt32(rw["ID"]); if (previous == rowID) RowList.Add(rw.Row); else { // Call the function that handles the duplicates if(RowList.Count > 1) HandleTheDuplicates(RowList); RowList.Clear(); } previous = rowID; } 

LINQ是一个很好的select:

 List<DataRow> RowList = new List<DataRow>(); foreach (DataRow row in importSetOfTables.Tables["MyTable"].Rows) { // Use LINQ to get a list of rows matching on ID List<DataRow> matches = (from t in importSetOfTables.Tables["MyTable"].Rows where row.ID == t.ID select a).ToList(); // Insert matching rows into your collection if (matches.Count() > 0 ) if (!(RowList.Contains(matches[0])) RowList.AddRange(matches); } 

如果你想从原始集合中删除它们,另一个foreach循环可能会工作:(通常不希望从你正在迭代的集合中删除项目)

 foreach(DataRow row in RowList) { if (importSetOfTables.Tables["MyTable"].Rows.Contains(row)) importSetOfTables.Tables["MyTable"].Rows.Remove(row); }