Linq Group By On Two Properties可能不同或相同

时间:2014-10-27 13:17:41

标签: c# .net linq

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

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

我想从游戏列表中对来自同一个游戏池的所有游戏进行分组。正如我上面提到的,大多数时候这个值对于两个客场/主队都是一样的。然而,可能存在交叉池游戏,其中值不同。有了Linq,我怎么能通过将122与远程工作组分组来说游戏,并将hometeampoolid与144组合在一起?如果它们相同但不同,我很容易。我不确定。

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

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

2 个答案:

答案 0 :(得分:3)

您需要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);

答案 1 :(得分:1)

您可以将Enumerable.GroupByanonymous types结合使用。

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)