Espressioni Lambda annidate

c# expression-trees lambda

Domanda

Qualcuno ha idea di come io chiamo un'espressione lambda dall'interno di un'espressione lambda?

Se ho:

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

Nel codice sopra invece di scrivere l'espressione AsViewModel all'interno di StudentViewModel come:

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

Mi piacerebbe chiamare CourseViewModel.AsViewModel per consentire il riutilizzo del codice e mantenere il codice convertendo un corso in CourseViewModel nella classe CourseViewModel. È possibile?

Risposta popolare

Puoi semplicemente usare x.Courses.Select(c => CourseViewModel.AsViewModel(c)) Quindi la tua intera espressione sarebbe:

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


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché