Como reutilizar uma expressão em um único objeto em outra expressão
Sinto que estou perdendo algo simples, mas não encontrei a documentação que responde à minha pergunta.
Recentemente, decomponho algumas das projeções do linq em expressões reutilizáveis. Ele funciona muito bem ao operar em uma coleção, mas não consigo descobrir como aplicar uma expressão a um único objeto em outra expressão. Abaixo está um exemplo do que estou tentando realizar:
public class Person
{
public string ID { get; set; }
public string Name { get; set; }
}
public class PersonDto
{
public string ID { get; set; }
public string Name { get; set; }
}
public class Department
{
Person Manager { get; set; }
List<Person> Employees { get; set; }
}
public class DepartmentDto
{
PersonDto Manager { get; set; }
List<PersonDto> Employees { get; set; }
}
public Expression<Func<Person, PersonDto>> CreatePersonDto = p => new PersonDto
{
ID = p.ID,
Name = p.Name
};
public Expression<Func<Department, DepartmentDto>> CreateDepartmentDto = d => new DepartmentDto
{
Manager = d.Manager // How do I transform this `Person` using `CreatePersonDto`
Employees = d.Employees.Select(CreatePersonDto) //Does not work either
};
EDIT: Para ficar claro, estou usando o Linq-to-Entities que precisa usar essa expressão para gerar uma instrução SQL. Como resultado, não possoCompile
a expressão para umFunc
como eu poderia usar o Linq-to-Objects.