Если я вас правильно понимаю, это то, что вы хотите:
После десериализации данных вы получаете список, а затем фильтруете его:
var result = list.GroupBy(x => new { x.name, x.number })
.Select(y => y.OrderByDescending((z => z.updatedAt))).ToList();
EDIT:
Если вы хотите сделать это только с 1 циклом, вы можете сделать что-то вроде:
List<Tuple<string, string, DateTime>> latestAdded = new List<Tuple<string, string, DateTime>>();
var item = latestAdded.Where(x => x.Item1 == newdata.name && x.Item2 == newdata.number).FirstOrDefault();
if (item == null)
{
latestAdded.Add(new Tuple<string, string, DateTime>(newdata.name, newdata.number, newdata.updatedAt));
}
else
{
if(item.updatedAt > newdata.updatedAt)
{
item.updatedAt = newdata.updatedAt;
}
}