比方说,我有EF模型两个项目可能被投射到下面的DTO:Linq to entity。嵌套投影
public class AddressDto
{
public int Id { get; set; }
public string Address { get; set; }
public static Expression<Func<Address, AddressDto>> Address2AddressDto()
{
return x => new AddressDto() {
Id = x.Id,
FullName = x.AddressLine
};
}
}
public class ClientDto
{
public int Id { get; set; }
public int FullName { get; set; }
public AddressDto Address { get; set; }
}
我怎样才能创建ClientDto
重用从AddressDto
投影到Client
转换嵌套Address
投影?基本上,我想是这样的:
public static Expression<Func<Client, ClientDto>> Client2ClientDto()
{
return x => new ClientDto() {
Id = x.Id,
FullName = x.FullName,
Address
= <Apply projection AddressDto.Address2AddressDto to object x.Address>
};
}
我知道,我可以这样做:
public static Expression<Func<Client, ClientDto>> Client2ClientDto()
{
return x => new ClientDto() {
Id = x.Id,
FullName = x.FullName,
Address = new AddressDto() {
Id = x.Id,
FullName = x.AddressLine
}
};
}
但我想管理AddressDto
投影在一个地方,而不是每次使用这个投影的地方(实对象要复杂得多,代码重复会导致长期的问题)。
在我的来电显示的代码我想要做这样的事情
dbRepo.Clients.Select(Client2ClientDto())
我所有的电流试图结束了异常:
的LINQ表达式节点类型“调用”在LINQ不支持到实体。
Automapper不适用于LINQ to Entities预测。 – StriplingWarrior
不,但如果您先将物体水合,_then_贴图可以起作用。 –
那么,如果我需要首先实现它,那么我可以使用像AddressDto.Address2AddressDto()这样的东西来实现同样的功能。编译()(x.Address)就是问题所在的行。我只是希望在那个时候还有一种方法还没有实现数据。 – AlexanderM