2014-10-27 58 views
1

我想通过在两个属性谁在95%的时间是一样的做1组,但有时它通过的LINQ集团通过在两个属性,也许不同或相同

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

我想从游戏列表中将同一个游戏池中的所有游戏分组。正如我上面提到的,大部分时间这个数值对于客队/主队都是一样的。不过,可能会出现一个交叉池游戏,其价值不同。有了Linq,我怎么可以通过与122组一起将这个游戏与这个游戏融为一体,并且将这个家庭游戏与144组合起来呢?如果他们相同但不同我很难确定。

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

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

可以显示一些样本数据以及样本结果吗? – Aducci 2014-10-27 13:25:44

+0

最后的信息是否无用? – 2014-10-27 13:38:30

+0

你是说你想让一件物品[可能]出现在两个地方,即每个_distinct_ PoolId的[和'under']一次? – tolanj 2014-10-27 13:47:50

回答

3

你需要Concat(UNION ALL)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

您可以使用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) 
+0

但不会创建一个包含122和144的组?我希望所有122人的比赛(即使主队有144人),反之亦然。 – 2014-10-27 13:34:37

+0

@MikeFlynn它将为每个可能的AwayTeamPoolId + HomeTeamPoolId组合创建一个组。如果由于某种原因,这不是您想要的,请提供样本输入和预期输出,以便我们帮助您。 – dcastro 2014-10-27 13:36:40

+0

我不是那样做的吗? – 2014-10-27 13:37:30