模型未按预期工作 C#

model isn't working as expected C#

我的模型正在获取我需要的数据,但我不确定如何按照我需要的方式组织它。我在模型拉动团队和球员的地方拥有它。问题是将我的数据映射到模型时,它会给我重复的团队,并且不允许我单独调用玩家。本质上我为每个球员都有一个新对象,但我想为每个团队都有一个新对象,并且没有重复。我还希望每支球队都有一名球员 属性,我可以在其中拉一名球员。

这是我目前的情况。

当前方法

public HashSet<Player> getPlayers()

    {
        var myHashset = new HashSet<Player>();

        const string storedProc = "aProc";

        dynamic players;

        using (var conn = DBconnection.myConnection())
        {
        players = conn.Query(storedProc, commandType: CommandType.StoredProcedure);
        }

        foreach (var record in players)
        {
            var myPlayer = new Player
            {
                team = record.team,
                player = record.player
            };

            if (myPlayer != null)
            {
                myHashset.Add(myPlayer);
            }
        }
        return myHashset;

型号

public class Player
{
    public string team { get; set; }
    public string player { get; set; }

}

所以总而言之,我需要它 return 一个检查数据以查看团队是否重复的对象。如果是,则将玩家添加到当前存在的团队中。如果是新队,则创建球队,并添加球员。

在 visual studio

中执行时存储的 Proc returns

它 return 是一个 table 是这样布局的。

RowID --- 球员 --- 球队
1 --- 罗伊 --- 孟加拉虎
2 --- 尼克 --- 孟加拉虎
3 --- 杰夫 --- 布朗斯
4 --- 卡尔 --- 钢人

根据对您问题的评论,我认为以下内容可能会有所帮助。但是,根据记录,none 这是最佳做法,我不能专业地推荐其他人这样做。但它解决了您所遇到的问题。

如果你只是想得到没有重复的球队名单,你可以这样做:

List<string> teams = myHashSet.Select(x => x.team).Distinct().ToList();

这将 return 一个不同的团队列表。从本质上讲,如果你想获得单独的团队,并且只是通过一名球员,你将不得不在你建立起来之后手动通过你的 HashSet

编辑:问题本身下方评论中的一些信息已被删除(或者我看不到它们!)但 alphamalle 确实提到他们无权修改存储过程,因此我采用了上述方法。

我建议你检查你的模型结构。

public class Team
{
    public string Name { get; set; }
    public List<string> Players { get; set; }
}

然后在你的循环中

List<Team> teams = new List<Team>();

foreach (var record in players)
{
    Team team = teams.SingleOrDefault(q=>q.Name == record.team);

    if(team == null)
    {
         team = new Team();
         team.Name = record.team;
         team.Players = new List<string>();
         team.Players.Add(record.player);
         teams.Add(team);
    }
    else
    {
        team.Players.Add(record.player);
    }       
}

然后 return 您的团队列表(不要忘记更改您的方法 return 类型)

return teams;