Expressions Lambda imbriquées

c# expression-trees lambda

Question

Quelqu'un at-il une idée de la façon dont j'appelle une expression lambda dans une expression lambda?

Si j'ai:

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

Dans le code ci-dessus plutôt que d'écrire l'expression AsViewModel dans StudentViewModel, procédez comme suit:

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

J'aimerais appeler CourseViewModel.AsViewModel pour permettre la réutilisation de code et conserver le code convertissant un cours en un CourseViewModel dans la classe CourseViewModel. Est-ce possible?

Réponse populaire

Vous pouvez simplement utiliser x.Courses.Select(c => CourseViewModel.AsViewModel(c)) Ainsi, toute votre expression serait:

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi