模型未按预期工作 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;
我的模型正在获取我需要的数据,但我不确定如何按照我需要的方式组织它。我在模型拉动团队和球员的地方拥有它。问题是将我的数据映射到模型时,它会给我重复的团队,并且不允许我单独调用玩家。本质上我为每个球员都有一个新对象,但我想为每个团队都有一个新对象,并且没有重复。我还希望每支球队都有一名球员 属性,我可以在其中拉一名球员。
这是我目前的情况。
当前方法
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;