关于两个可能不同或相同的性质
本文关键字:于两个 | 更新日期: 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
(并集所有)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);
您可以将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)