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

时间:2019-02-24 18:59:04

标签: 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;

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

要显示所做的选择,我想将结果合并到datagridview中,其中每个参与者都有一列,每一行代表该参与者针对特定问题给出的答案。

因此,我正在考虑创建一个包含新类的列表,该类包含由不同参与者给出的所有问题的答案。

public class ChoicesViewClass
{
    public bool ChoicePlayer1 { get; set; }
    public bool ChoicePlayer2 { get; set; }
    public bool ChoicePlayer3 { get; set; }
    public bool ChoicePlayer4 { get; set; }
}

但是如何使用Linq从第一个列表的第二个列表中填充Choices?

我正在尝试这样的事情:

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

但是s是我被困住的地方。 我该怎么解决?

谢谢。

1 个答案:

答案 0 :(得分: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();

但是我有点困惑,为什么要使其复杂化呢?播放器为什么不能具有ChoicesViewClass的属性?像这样:

public class PlayerClass
{
  public int Id {get; set;}
  public string Name {get; set;}
  public ChoicesViewClass choices {get; set;}
}