Объединить два свойства из объекта в списке и сгладить его с Linq

1

У меня есть список объектов в этой структуре ниже. Как создать отдельный список List<int> всех AwayTeamId и HomeTeamId с помощью linq в одном вызове? Я знаю, что могу сделать выбор многих на HomeTeamId и получить все из них, но мне также нужен AwayTeamId.

class Game {

   int AwayTeamId;
   int HomeTeamId;

}
  • 0
    Итак, если бы у вас было 5 экземпляров Game вас было бы 10 записей в вашем новом списке (при условии, что они все отличались)?
  • 0
    Да, это то, что я пытаюсь сделать
Теги:
linq
flatten

3 ответа

3
Лучший ответ

Ответ Уриила может быть еще короче:

var result = games
    .SelectMany(game => new[] { game.AwayTeamId, game.HomeTeamId })
    .Distinct()
;

Нет необходимости в дополнительных. Выберите и создайте списки для каждой игры.

  • 0
    Приятно. А как насчет звонка в Distinct ?
  • 0
    Не было строгого требования для удаления отдельных значений. Только «весь AwayTeamId», но отличный от него, может удалить неуникальное, и поэтому мы получаем не «все».
Показать ещё 3 комментария
3

Это будет работать:

var result = entityContext.ListOfGames
      .Select(p=>new List<int>{p.AwayTeamId, p.HomeTeamId})
      .SelectMany(p=>p).Distinct();

Если LINQ to ENTITY вам нужно будет вызвать .ToList() после ListOfGames, чтобы это решение работало

  • 1
    Мне очень нравится этот ответ, спасибо!
1

Предполагая, что вы только после плоского списка всех идентификаторов команды (дома или в гостях), то как насчет объединения двух SELECT?

var teamIds = games.Select(g => g.HomeTeamId).Union(games.Select(g => g.AwayTeamId));

[ games являющиеся списком объектов Game в моем примере выше]

  • 0
    Союз будет обращаться с отличным уже.
  • 0
    @Shoe - вы правы - ответ обновлен.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню