从实体列表中合并两个属性并将其与Linq展平

时间:2014-06-12 13:53:13

标签: c# asp.net .net linq flatten

我在下面的结构中有一个实体列表。如何在一次通话中使用linq创建所有List<int>AwayTeamId HomeTeamId的明确列表?我知道我可以在HomeTeamId上选择很多并获得所有这些,但我也需要包含AwayTeamId。

class Game {

   int AwayTeamId;
   int HomeTeamId;

}

3 个答案:

答案 0 :(得分:3)

这将有效:

var result = entityContext.ListOfGames
      .Select(p=>new List<int>{p.AwayTeamId, p.HomeTeamId})
      .SelectMany(p=>p).Distinct();

如果它是LINQ to ENTITY,您需要在ListOfGames之后调用.ToList(),以使此解决方案正常工作

答案 1 :(得分:3)

Uriil的回答可能更短:

var result = games
    .SelectMany(game => new[] { game.AwayTeamId, game.HomeTeamId })
    .Distinct()
;

无需额外。为每个游戏记录选择和列出创建。

答案 2 :(得分:2)

假设您刚刚在所有团队ID(主页或离开)的平面列表之后,那么UNIONing两个SELECT怎么样?

var teamIds = games.Select(g => g.HomeTeamId).Union(games.Select(g => g.AwayTeamId));

[games是上例中Game个实体的列表