我想在两个属性上进行分组,这些属性在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)
答案 0 :(得分:3)
您需要Concat
(联合所有)AwayTeamPool
和HomeTeamPool
的列表,然后将其分组:
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.GroupBy
与anonymous 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)