el modelo no funciona como se esperaba C #

c# dapper mapping model

Pregunta

Mi modelo está obteniendo datos que necesito, pero no estoy seguro de cómo organizarlos de la manera que necesito. Lo tengo donde el modelo tira de un equipo y un jugador. El problema es cuando mapeo mis datos al modelo me da equipos duplicados, y no me permite llamar a los jugadores individualmente. esencialmente tengo un nuevo objeto para cada jugador, pero quiero un nuevo objeto para cada equipo en su lugar, y sin duplicados. También quiero que cada equipo tenga una propiedad de jugador donde pueda tirar de un jugador individual.

Esto es lo que tengo hasta ahora.

Método actual

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;

Modelo

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

}

Entonces, en conclusión, necesito devolver un objeto que verifique los datos para ver si el equipo es un duplicado. Si es así, agrega el jugador al equipo que actualmente existe. Si es un equipo nuevo, crea el equipo y agrega el jugador.

Lo que almacena Proc regresa cuando se ejecuta en Visual Studio

Devuelve una tabla que se presenta así.

RowID --- jugador --- Equipo
1 --- roy --- bengals
2 --- nick --- bengals
3 --- jeff --- marrones
4 --- carl --- steelers

Respuesta aceptada

Te sugiero que revises la estructura de tu modelo.

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

entonces en tu bucle

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

luego devuelve tu lista de equipos (no olvides cambiar el tipo de devolución de tu método)

return teams;

Respuesta popular

De los comentarios hechos a su pregunta, creo que lo siguiente puede ser útil. Sin embargo, para el registro, nada de esto es una mejor práctica, y no puedo recomendar profesionalmente que otras personas hagan esto. Pero resuelve el problema que tienes con las limitaciones que tienes.

Si solo desea obtener la lista de equipos sin duplicados, puede hacer lo siguiente:

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

Esto devolverá una lista distinta de equipos. Esencialmente, si desea obtener equipos individuales, y simplemente pasar a través de un jugador, tendrá que pasar manualmente a través de su HashSet después de haberlo creado.

EDITAR: Alguna información en los comentarios debajo de la pregunta misma ha sido eliminada (¡o no puedo verlos!) Pero alphamalle mencionó que no tienen acceso para modificar el procedimiento almacenado, de ahí mi enfoque anterior.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué