关于两个可能不同或相同的性质

本文关键字:于两个 | 更新日期: 2023-09-27 18:27:54

我想通过两个属性进行分组,这两个属性在95%的时间内是相同的,但有时可能不是通过

class Game
{
   string AwayTeamPoolId;  // 122
   string HomeTeamPoolId;  // 144
}

我想从游戏列表中对同一池中的所有游戏进行分组。正如我在上面提到的,大多数时候,这个值对于两支客场/主队都是相同的。然而,可能会有一个跨池游戏,其中的值是不同的。对于林克,我怎么能用122组的awayteampoolid和144组的hometeampoolid来形容比赛呢?如果它们相同但不同,那很容易。我不确定。

122
  Game 1 (122/122)
  Game 2 (122/144)
144
  Game 2 (122/144)
  Game 3 (144/144)

关于两个可能不同或相同的性质

您需要Concat(并集所有)AwayTeamPoolHomeTeamPool的列表,然后在上面分组,如下所示:

var query = games.Select(x => new { Game=x, PoolId = x.AwayTeamPoolId })
                 .Concat(games.Where(x => x.HomeTeamPoolId != x.AwayTeamPoolId)
                              .Select(x=> new { Game=x, PoolId = x.HomeTeamPoolId })
                 .GroupBy(x => x.PoolId, x => x.Game);

您可以将Enumerable.GroupBy与匿名类型结合使用。

var groupedGames = games.GroupBy(
           game => new { game.AwayTeamPoolId, game.HomeTeamPoolId });

要获得AwayTeamPoolId为122、HomeTeamPoolId为144的游戏:

var games = groupedGames.Single(
                group => group.Key.AwayTeamPoolId = 122 && group.Key.HomeTeamPoolId = 144)