Your best bet, if you want to follow this pattern, is probably to use LINQKit. It'll let you do this:
public static Expression<Func<Client, ClientDto>> Client2ClientDto()
{
var addr = AddressDto.Address2AddressDto()
return x => new ClientDto() {
Id = x.Id,
FullName = x.FullName,
Address = addr.Invoke(x)
};
}
But you'll have to call it like this:
dbRepo.Clients.AsExpandable().Select(Client2ClientDto())