我需要将EF实体映射到各自的DTO。在下面的示例中,我具有EF实体Parent和Child,并且Child实体包含对Parent对象的引用。我也有ParentDto和ChildDto(DTO),并且ChildDto包含对ParentDto(不是Parent)的引用。因此,如何在以下方法中将ParentDto引用分配给ChildDto实例:
public Task<List<ParentDto>> Method()
{
return (Context.Set<Parent>()
.Where(someCondition)
.Select(p => new ParentDto
{
// here we map all properties from Parent to ParentDto
... ,
Children = p.Children.Select(c => new ChildDto
{
// here we map all properties from Child to ChildDto
... ,
Parent = ? // reference to newly created ParentDto instance
})
}).ToListAsync();
}
最佳答案
您必须使用变量,但不能在lambda表达式中使用它。您必须在调用ToListAsync()
后在内存中进行映射:
public Task<List<ParentDto>> Method()
{
var parents = await (Context.Set<Parent>()
.Where(someCondition)
.ToListAsync());
return parents.Select(p =>
{
var parent = new ParentDto();
//map parent properties
parent.Children = p.Children.Select(c => new ChildrenDto
{
//map child properties
});
return parent;
}).ToList();
}