I'm not sure i understand you well, but seems you want to delete rows from table untill the sum of duplicated rows is less or equal to 900. If yes, you can use Linq
TakeWhile method[
^].
See:
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]
{
new DataColumn("ID", typeof(int)),
new DataColumn("S_Number", typeof(int)),
new DataColumn("Amount", typeof(int)),
});
dt.Rows.Add(new object[]{1, 55, 100});
dt.Rows.Add(new object[]{2, 55, 100});
dt.Rows.Add(new object[]{3, 66, 100});
dt.Rows.Add(new object[]{4, 66, 100});
dt.Rows.Add(new object[]{5, 77, 100});
dt.Rows.Add(new object[]{6, 88, 100});
dt.Rows.Add(new object[]{7, 88, 100});
dt.Rows.Add(new object[]{8, 99, 100});
dt.Rows.Add(new object[]{9, 44, 100});
dt.Rows.Add(new object[]{10, 88, 100});
int condition = 900;
var rows2delete = dt.AsEnumerable()
.GroupBy(x=>x.Field<int>("S_Number"))
.Where(grp=>grp.Count()>1)
.TakeWhile(grp=>grp.Sum(x=>x.Field<int>("Amount"))<=condition);
Console.WriteLine("Duplicated data to delete:");
foreach(var r in rows2delete)
{
Console.WriteLine("S_Number = {0} | Amount = {1}", r.Select(x=>x.Field<int>("S_Number")).First(), r.Sum(x=>x.Field<int>("Amount")));
}
Result:
Duplicated data to delete:
S_Number = 55 | Amount = 200
S_Number = 66 | Amount = 200
S_Number = 88 | Amount = 300