假设我有以下按列ID DataTable排序的内容:
ID A B
-------------
1 TT 12
1 ZZ 12
2 SS 11
3 SS 15
3 RR 27我的目标是实现这一点:
如果有任何具有相同ID的重复行,我需要删除列A和B中的值。
这是我想要基于我的datatable实现的:
ID A B
-----------
1 TT 12
1
2 SS 11
3 SS 15
3
//here's the alogirithm that i have tried :
DataTable dt = new DataTable();
dt.Columns.Add("A", typeof(int));
dt.Columns.Add("B", typeof(string));
dt.Columns.Add("C", typeof(int));
dt.Rows.Add(1, "TT",12);
dt.Rows.Add(1, "ZZ",12);
dt.Rows.Add(2, "SS",11);
dt.Rows.Add(3, "SS",15);
dt.Rows.Add(3, "RR", 27);
int id1 = 0;
int id2 = 0;
for (int i = 0; i < dt.Rows.Count; i++)
{
id1= (int)dt.Rows[i]["A"];
for (int j = i + 1; j < dt.Rows.Count; j++)
{
id2 = (int)dt.Rows[j]["A"];
if (id1 == id2)
{
dt.Rows[j]["B"] = DBNull.Value;
dt.Rows[j]["C"] = DBNull.Value;
}
}
}发布于 2020-01-31 04:50:26
我认为这样做的一个好方法是:
// group by the first column
var groupsOfDuplicates = dt.Rows.Cast<DataRow>().GroupBy(row => row[0]);
// for each group
foreach (var groupOfDuplicateRows in groupsOfDuplicates)
{
// Skip the first, let's just erase the others
foreach (var duplicateRow in groupOfDuplicateRows.Skip(1))
{
duplicateRow[1] = DBNull.Value;
duplicateRow[2] = DBNull.Value;
}
}发布于 2020-01-31 05:08:26
dt.AsEnumerable().GroupBy(x => x["A"]).ToList().ForEach(myGroup =>
myGroup.Skip(1).ToList().ForEach(myRow => {
myRow["B"] = DBNull.Value;
myRow["C"] = DBNull.Value;
}));https://stackoverflow.com/questions/59994093
复制相似问题