Expresiones Lambda anidadas

c# expression-trees lambda

Pregunta

¿Alguien tiene alguna idea de cómo llamo una expresión lambda desde dentro de una expresión lambda?

Si tengo:

public class CourseViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }

    public static Expression<Func<Course, CourseViewModel>> AsViewModel = x =>
        new CourseViewModel
        {
            Id = x.Id,
            Name = x.Name,
        }
}

public class StudentViewModel
{
    public int Id { get; set; }
    public string Name{ get; set; }
    public string PreferredCheese { get; set; }
    public IEnumerable<CourseViewModel> Courses { get; set; }

    public static Expression<Func<Student, StudentViewModel>> AsViewModel = x =>
        new StudentViewModel
        {
            Id = x.Id,
            Name = x.Name,
            PreferredCheese = x.PreferredCheese,
            Courses = ???I'd like to call the CourseViewModel.AsViewModel here
        }
}

En el código anterior, en lugar de escribir la expresión AsViewModel dentro de StudentViewModel como:

Courses = new CourseViewModel
{
    Id = x.Id,
    Name = x.Name,
}

Me gustaría llamar a CourseViewModel.AsViewModel para permitir la reutilización del código y mantener el código que convierte un curso en un CourseViewModel en la clase CourseViewModel. es posible?

Respuesta popular

Puedes usar x.Courses.Select(c => CourseViewModel.AsViewModel(c)) Por lo tanto, toda tu expresión sería:

public static Expression<Func<Student, StudentViewModel>> AsViewModel = x =>
        new StudentViewModel
        {
            Id = x.Id,
            Name = x.Name,
            PreferredCheese = x.PreferredCheese,
            Courses = x.Courses.Select(c => CourseViewModel.AsViewModel(c))
        }


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow