使用Linq将带有嵌套列表的列表转换为单独的列表

Cai*_*ech 5 c# linq

我正在构建一个游戏应用程序.在我的表单上,我有一个datagridview,我想绑定不同玩家的选择.

我有一个特定的PlayerClass,我把它放在名为Players的列表中.

public class PlayerClass
{
  public int Id {get; set;}
  public string Name {get; set;}
  public List<bool> choices {get; set;}
}

Public List<PlayerClass> Players;
Run Code Online (Sandbox Code Playgroud)

在此列表中,我将添加玩家针对不同问题所做出的选择.

为了显示所做的选择,我想将结果组合到datagridview中,其中每个玩家都有一列,每行代表该玩家为该特定问题给出的答案.

所以我想创建一个包含新类的列表,该类包含不同玩家为一个问题提供的所有答案.

public class ChoicesViewClass
{
    public bool ChoicePlayer1 { get; set; }
    public bool ChoicePlayer2 { get; set; }
    public bool ChoicePlayer3 { get; set; }
    public bool ChoicePlayer4 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,如何使用Linq从第一个列表中填充辅助列表中的选项?

我正在尝试这样的事情:

grdChoices.DataSource = Players
                      .Select(s => new ChoicesViewClass{ ChoicePlayer1 = s, ChoicePlayer2 = s, ChoicePlayer3 = s, ChoicePlayer4 = s })
                      .ToList();
Run Code Online (Sandbox Code Playgroud)

但这s就是我被困的地方.我怎么解决这个问题?

谢谢.

Tia*_*lva 6

那么你是试图通过索引访问玩家选择?玩家选择列表默认有4个长度吗?这将解决您的问题:

grdChoices.DataSource = Players
                      .Select(s => new ChoicesViewClass{ ChoicePlayer1 = s.choices[0], ChoicePlayer2 = s.choices[1], ChoicePlayer3 = s.choices[2], ChoicePlayer4 = s.choices[3] })
                      .ToList();
Run Code Online (Sandbox Code Playgroud)

但是我有点困惑,为什么要把它复杂化呢?为什么玩家不能拥有ChoicesViewClass的属性?像这样:

public class PlayerClass
{
  public int Id {get; set;}
  public string Name {get; set;}
  public ChoicesViewClass choices {get; set;}
}
Run Code Online (Sandbox Code Playgroud)