при условии, что данные соответствуют указанному в вашем вопросе, вы можете сделать следующее
set.GroupBy(x => x.City)
.Select(x => new { NamesCount = x.Distinct().Count(), City = x.Key })
, если вы используете linq-to-sql, вам нужно добавить ToList
перед Select
как это
set.GroupBy(x => x.City)
.ToList()
.Select(x => new { NamesCount = x.Distinct().Count(), City = x.Key })