none
seleccionar 2 columnas RRS feed

  • Pregunta

  • Buen día, tengo una aplicación C# en la que ejecuto lo siguiente:

    IEnumerable<Object> assignedBrigadists = from DataRow row in selectableTable.Rows
         where row["Anyo"] != DBNull.Value
         select row["Name"]

    Con esto obtengo una lista de nombres que queda en assignedBrigadists.

    Esto funciono perfecto hasta que necesite obtener los nombres con catenados a los apellidos, ahi ya no supe como hacerlo.

    Agradecere su ayuda.

    Lo que quiero es que assignedBrigadists almacene row["Name"] + " " + row["LastName"]

    viernes, 10 de mayo de 2013 18:02

Respuestas

  • Efectivamente, te acabas de topar con algo que se llama "variancia". Aunque un tipo A se pueda convetir implícitamente en tipo B, eso no implica que una lista de A se pueda convertir en una lista de B.

    Por ese motivo, en mi ejemplo yo te escribí en la declaración "IEnumerable<String> assignedBrigadists" en lugar del "IEnumerable<Object> assignedBrigadists" que tú tenías originalmente.

    Si por alguna razón no puedes cambiar assignedBrigadists para que sea un enumerable de Strings en lugar de Objects, entonces el remedio es meter un "cast" en la consulta LINQ:

    IEnumerable<Object> assignedBrigadists = from DataRow row in selectableTable.Rows
         where row["Anyo"] != DBNull.Value
         select (object)(row["Name"].ToString() + " " + row["LastName"]);

    • Marcado como respuesta jeduardonl lunes, 13 de mayo de 2013 17:13
    sábado, 11 de mayo de 2013 5:46

Todas las respuestas

  • Debería hacer lo que quieres si lo escribes así:

    IEnumerable<String> assignedBrigadists = from DataRow row in selectableTable.Rows
         where row["Anyo"] != DBNull.Value
         select row["Name"].ToString() + " " + row["LastName"]

    row["Name"] es de tipo Object, y el Object no se puede concatenar usando un "+". Por eso es necesario poner el ToString().

    viernes, 10 de mayo de 2013 18:29
  • Me sale un error:

    viernes, 10 de mayo de 2013 19:18
  • Efectivamente, te acabas de topar con algo que se llama "variancia". Aunque un tipo A se pueda convetir implícitamente en tipo B, eso no implica que una lista de A se pueda convertir en una lista de B.

    Por ese motivo, en mi ejemplo yo te escribí en la declaración "IEnumerable<String> assignedBrigadists" en lugar del "IEnumerable<Object> assignedBrigadists" que tú tenías originalmente.

    Si por alguna razón no puedes cambiar assignedBrigadists para que sea un enumerable de Strings en lugar de Objects, entonces el remedio es meter un "cast" en la consulta LINQ:

    IEnumerable<Object> assignedBrigadists = from DataRow row in selectableTable.Rows
         where row["Anyo"] != DBNull.Value
         select (object)(row["Name"].ToString() + " " + row["LastName"]);

    • Marcado como respuesta jeduardonl lunes, 13 de mayo de 2013 17:13
    sábado, 11 de mayo de 2013 5:46
  • No me di cuenta que cambiaste el object por string, de cualquier modo no podia hacer el cambio así que use el cast.

    despues de eso funciono perfectamente, muchas gracias.

    lunes, 13 de mayo de 2013 17:13