using System.Linq.Expressions;
using AutoMapper.Extensions.ExpressionMapping;
public static void Main()
var mapperConfiguration = new MapperConfiguration(
cfg.CreateMap<UserId, string>().ConvertUsing(u => u.ToString());
cfg.CreateMap<string, UserId>().ConvertUsing(u => UserId.FromString(u));
cfg.CreateMap<User, DbUser>()
.ForMember(dbu => dbu.Id, opt => opt.MapFrom(u => u.Id.ToString()));
cfg.CreateMap<DbUser, User>()
.ForMember(u => u.Id, opt => opt.MapFrom(dbu => UserId.FromString(dbu.Id)));
cfg.AddExpressionMapping();
mapperConfiguration.AssertConfigurationIsValid();
IMapper mapper = mapperConfiguration.CreateMapper();
var idToFind = new UserId(Guid.NewGuid());
Expression<Func<User, bool>> bllExpression = x => x.Id == idToFind;
var dbExpression = mapper.MapExpression<Expression<Func<DbUser, bool>>>(bllExpression);
Console.WriteLine(dbExpression.ToString());
public UserId Id { get; set; }
public string Name { get; set; }
public string Id { get; set; }
public string Name { get; set; }
public UserId(Guid id) => Id = id;
public override string ToString()
public static UserId FromString(string value)
return new UserId(Guid.Parse(value));
public static bool operator ==(UserId a, UserId b)
public static bool operator !=(UserId a, UserId b)