You could use a lookup to count the ids:
// copy structure and data into new DataTable
DataTable tblCount = yourOriginalDataTable.Copy();
// add the count column
tblCount.Columns.Add("IdCount", typeof(int));
// create a dictionary like collection where the key is the id
var idCounter = tblCount.AsEnumerable().ToLookup(row => row.Field<int>("Id"));
// loop the rows and update the column with the correct count value
foreach(DataRow row in tblCount.Rows)
row.SetField("IdCount", idCounter[row.Field<int>("Id")].Count());
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…