le modèle ne fonctionne pas comme prévu C #

c# dapper mapping model

Question

Mon modèle reçoit des données dont j'ai besoin, mais je ne sais pas comment les organiser comme je le souhaite. Je l'ai où le modèle tire une équipe et un joueur. Le problème est que lorsque je mappe mes données sur le modèle, cela me donne des équipes en double et ne me permet pas d'appeler les joueurs individuellement. essentiellement, j'ai un nouvel objet pour chaque joueur, mais je veux un nouvel objet pour chaque équipe et sans doublons. Je veux aussi que chaque équipe ait une propriété de joueur où je peux tirer un joueur individuel.

Voici ce que j'ai jusqu'ici.

Méthode actuelle

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;

Modèle

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

}

Donc, en conclusion, j'en ai besoin pour renvoyer un objet qui vérifie les données pour voir si l'équipe est un doublon. Si c'est le cas, ajoutez le joueur à l'équipe qui existe actuellement. Si c'est une nouvelle équipe, créez l'équipe et ajoutez le joueur.

Qu'est-ce que Proc stocke lorsqu'il est exécuté dans Visual Studio

Il retourne une table qui est disposée comme ceci.

RowID --- joueur --- Équipe
1 --- roy --- bengals
2 --- pseudo --- bengals
3 --- jeff --- bruns
4 --- carl --- steelers

Réponse acceptée

Je vous suggère de revoir la structure de votre modèle.

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

alors dans votre boucle

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

puis retournez votre liste d'équipes (n'oubliez pas de changer le type de retour de votre méthode)

return teams;

Réponse populaire

D'après les commentaires faits sur votre question, je pense que ce qui suit peut être utile. Cependant, pour la petite histoire, rien de tout cela n'est la meilleure pratique, et je ne peux pas recommander professionnellement à d'autres personnes de le faire. Mais cela résout le problème que vous rencontrez avec les contraintes auxquelles vous êtes soumis.

Si vous souhaitez simplement obtenir la liste des équipes sans doublons, procédez comme suit:

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

Cela renverra une liste distincte des équipes. Essentiellement, si vous voulez obtenir des équipes individuelles et simplement accéder à un joueur, vous devrez passer manuellement par votre HashSet après l'avoir construit.

EDIT: Certaines informations dans les commentaires ci-dessous la question elle-même ont été supprimés (ou je ne peux pas les voir!) Mais alphamalle a mentionné qu'ils n'ont pas accès à modifier la procédure stockée, d'où mon approche ci-dessus.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi