是否可以在以下表达式树中获取对PositionViewModel
的引用:
public static Expression<Func<Model, ViewModel>> ToViewModel
{
get
{
return x => new PositionViewModel
{
Id = x.Id,
Name = x.Name,
Employees = x.Employees.Select(e => new Employee
{
Id = e.Id,
Name = e.Name,
Position = ??? // reference to PositionViewModel
}).ToList()
};
}
}
我认为是,因为EF会这样做。 有什么建议吗?
编辑: 忘记提到“Postition”是ViewModel类型。
答案 0 :(得分:2)
我会自发地分步进行:
public static Expression<Func<Model, ViewModel>> ToViewModel
{
get
{
return x => GetViewModel(x);
}
}
public ViewModel GetViewModel(Model x)
{
var vm = new PositionViewModel
{
Id = x.Id,
Name = x.Name
};
vm.Employees = x.Employees.Select(p => new Employee
{
Id = p.Id,
Name = p.Name,
Position = vm
}).ToList();
return vm;
}
这样你仍然可以将它作为表达式树包装起来。
答案 1 :(得分:1)
您可以做的是使用Employees
属性的事实,因此您可以将任何代码添加到其setter中。类似的东西:
private IList<Employee> employees;
public IList<Employee> Employees
{
get
{
return employees;
}
set
{
employees = value;
foreach (var employee in employees)
{
employee.Position = this;
}
}
}
这样,您无需在表达式中执行任何操作,Position
将自动设置。