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