模型没有像预期的那样工作C#

时间:2015-06-05 12:25:19

标签: c# model mapping dapper

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

这是我到目前为止所拥有的。

当前方法

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; }

}

总而言之,我需要它返回一个检查数据的对象,以查看该团队是否重复。如果是,则将玩家添加到当前存在的团队。如果是新团队,则创建团队,然后添加播放器。

在Visual Studio中执行时,Proc返回的内容

它返回一个像这样布局的表。

RowID ---玩家---团队
1 --- roy --- bengals
2 ---尼克--- bengals
3 --- jeff --- browns
4 --- carl --- steelers

2 个答案:

答案 0 :(得分:2)

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

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 teams;

答案 1 :(得分:1)

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

如果您只想获得没有重复项的团队列表,您可以执行以下操作:

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

这将返回一个不同的团队列表。从本质上讲,如果你想获得个人团队,只需要通过一个玩家,你就必须在构建完成后手动浏览HashSet

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