Tengo una lista creada a partir de un procedimiento almacenado usando EF6.0

También he creado 3 clases

public class Resas
{
    public string todo{ get; set; }
    public string prop { get; set; }
    public string Code { get; set; }
    public string statusCode { get; set; }
    public string checkin { get; set; }
    public string checkout { get; set; }
    public List<profiles> profiles { get; set; }
}

public class profiles
{
    public string action { get; set; }
    public string id { get; set; }
    public string profileType { get; set; }
    public string title { get; set; }
    public string firstName { get; set; }
    public string middleName { get; set; }
    public string lastName { get; set; }
    public List<emailAddresses> emailAdresses { get; set; }
}

public class emailAddresses
{
    public string emailAddress { get; set; }
    public string emailAddress2 { get; set; }
}

Estoy haciendo un bucle for en la lista y necesito obtener ciertas columnas y ponerlas en la matriz (pondré dos, para que sea simple)

myEntities db = new myEntities();
List<rev_Result> revList = new List<rev_Result>();


revList.Clear();
revList = db.rev().ToList();

for (int i = 0; i < revList.Count(); i++)
{
    Resas resas = new Resas();
    profiles[] profiles = new profiles[1];

    resas.todo = revList[i].todo;
    resas.profiles[0].lastName = revList[i].lastName;
}

No estoy familiarizado con C # como puede ver en el pseudocódigo anterior.

No puedo entender cómo alimentar a las Resas con datos y luego a su perfil con datos y luego pasar a la siguiente entrada de Resas.

Cualquier ayuda apreciada.

1
PanosPlat 26 ene. 2016 a las 16:33

2 respuestas

La mejor respuesta

Puedes probar con Linq. Este es el código que debería resolver su problema, pero la clase Resas no tiene la propiedad action:

List<Resas> ls = revList.Select(x => new Resas() { 
    action = x.todo, 
    profiles = new List<profiles>() { 
        new profiles { lastName = x.lastName }
    }
).ToList();

Si necesita usar la clase action property of in profiles`:

List<Resas> ls = revList.Select(x => new Resas() { 
    profiles = new List<profiles>() { 
        new profiles { 
            action = x.todo,
            lastName = x.lastName
        }
    }
).ToList();
1
erikscandola 26 ene. 2016 a las 13:47

Eso es bastante simple usando Linq:

Resas resas = new Resas();
resas.profiles = revList
    .Select(x => new profiles() { action = x.todo, lastName = x.lastName })
    .ToList();

Lo que está sucediendo aquí es: recorre cada entrada en revList y obtiene su estructura de datos deseada (eso es lo que Select está haciendo). x se refiere a la entrada actual en el ciclo, mientras que lo que está al lado derecho de la flecha es tu 'salida': una nueva instancia de tu clase profiles con los miembros asignados en consecuencia. El resultado de todo esto luego se convierte en una lista (antes de ToList(), piense en ello como una receta para crear la lista) y se asigna a resas.profiles.


Por cierto, unas palabras sobre convenciones: normalmente, en C #, le daría a sus clases un nombre que comience con una letra mayúscula. Además, su clase profiles parece contener datos de exactamente un perfil, por lo que un mejor nombre podría ser Profile. Esto también hace que su estructura de datos sea más clara, ya que List<profiles> parece ser una lista de listas de perfiles, pero eso no es lo que realmente es, ¿verdad?

Además, los miembros generalmente también comienzan con una letra mayúscula, por lo que en lugar de action, lastName, tendrías: Action y LastName.

3
Henrik Ilgen 26 ene. 2016 a las 13:41