Я чувствую, что мне не хватает чего-то простого, но я не нашел документацию, отвечающую на мой вопрос.Как повторно использовать выражение для одного объекта в другом выражении
Я недавно разложил некоторые из линейных проекций на многоразовые выражения. Он отлично работает при работе в коллекции, но я не могу понять, как применить выражение к одному объекту в другом выражении. Ниже приведен пример того, что я пытаюсь сделать:
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: Чтобы было ясно, я использую Linq-на-Сущности, которые нужно использовать это выражение для генерации SQL заявление. В результате я не могу сделать Func
, поскольку я мог бы использовать Linq-to-Objects.
'CreatePersonDto' превращает' Person' в 'PersonDto', но тип' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ign '' PersonDto' в переменную 'Person' (это то, что вы хотите сделать в' Manager = // Как мне .... ') –
В моем примере произошла ошибка. Я изменил его. DepartmentDto должен состоять из PersonDto и списка. Спасибо за указание @codroipo –
Имеет ли вторая строка 'Employees = d.Employees.Select (CreatePersonDto)', дает вам какие-либо ошибки? Это для меня. IIRC невозможно легко использовать выражения внутри выражений. Вы должны вручную создать выражение, используя статические методы класса 'Expression'. – Mayoor