Проверьте, не связано ли количество списков, используя linq - PullRequest
3 голосов
/ 10 июля 2019

У штатов есть города. Мне нужно государство с большинством городов, только если нет связи. Связь означает, что в топ-2 штатах одинаковое количество городов.

var stateWithMostCities = _states
  .OrderByDescending(_p => _p.cities.Count())
  .Take(2)
  .ToList();

Теперь я могу проверить, если счет города первого штата = второй штат, и определить, есть ли связь. Однако я спрашиваю, можно ли это сделать в той же строке, показанной выше, используя takewhile, skip и другие творческие применения linq. Спасибо

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Технически, вы можете использовать Aggregate сверх упорядоченных состояний:

// the state with maximum cities; null in case of tie
var stateWithMostCities = _states
  .OrderByDescending(state => state.cities.Count())
  .Take(2) // at most 2 items to analyze     
  .Aggregate((s, a) => s.cities.Count() == a.cities.Count() ? null : s);

Но я сомневаюсь, что вы должны сделать это: сравнение верхних 2 состояний более читабельно .

2 голосов
/ 10 июля 2019

Как то так?

var stateWithMostCitiesWithoutATie =_states.GroupBy(_p => _p.cities.Count())
                                           .OrderByDescending(g=>g.Key)
                                           .FirstOrDefault(g=> g.Count()==1? g.First():null);

Ключ, как @Mong Zhu указал на Group по количеству городов, после этого вы можете заказать по desc, чтобы получить максимум, а если у max группы больше одного, то у вас есть ничья

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...