Skip to content

Commit f52417d

Browse files
committed
Improvement to map a constructor in a selector with no params.
1 parent 4a69e14 commit f52417d

File tree

4 files changed

+37
-3
lines changed

4 files changed

+37
-3
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<Authors>Jimmy Bogard</Authors>
44
<LangVersion>latest</LangVersion>
5-
<VersionPrefix>3.1.0</VersionPrefix>
5+
<VersionPrefix>3.1.1-preview01</VersionPrefix>
66
<WarningsAsErrors>true</WarningsAsErrors>
77
<NoWarn>$(NoWarn);1701;1702;1591</NoWarn>
88
</PropertyGroup>

src/AutoMapper.Extensions.ExpressionMapping/Extensions/VisitorExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,9 @@ public static ParameterExpression GetParameterExpression(this Expression express
111111
case ExpressionType.Parameter:
112112
return (ParameterExpression)expression;
113113
case ExpressionType.Quote:
114-
return GetParameterExpression(GetMemberExpression((LambdaExpression)((UnaryExpression)expression).Operand));
114+
return GetParameterExpression(((UnaryExpression)expression).Operand);
115115
case ExpressionType.Lambda:
116-
return GetParameterExpression(GetMemberExpression((LambdaExpression)expression));
116+
return GetParameterExpression(((LambdaExpression)expression).Body);
117117
case ExpressionType.ConvertChecked:
118118
case ExpressionType.Convert:
119119
var ue = expression as UnaryExpression;

src/AutoMapper.Extensions.ExpressionMapping/XpressionMapperVisitor.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,14 @@ protected override Expression VisitLambda<T>(Expression<T> node)
129129
return mapped;
130130
}
131131

132+
protected override Expression VisitNew(NewExpression node)
133+
{
134+
if (this.TypeMappings.TryGetValue(node.Type, out Type newType))
135+
return Expression.New(newType);
136+
137+
return base.VisitNew(node);
138+
}
139+
132140
protected override Expression VisitMemberInit(MemberInitExpression node)
133141
{
134142
if (this.TypeMappings.TryGetValue(node.Type, out Type newType))

tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/XpressionMapperTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,32 @@ public void Map__select_method_projecting_to_model_type()
429429
Assert.True(things.Count == 2);
430430
}
431431

432+
[Fact]
433+
public void Map_MemberInit()
434+
{
435+
//Arrange
436+
Expression<Func<ThingModel, ThingModel>> selection = s => new ThingModel { Car = s.Car };
437+
438+
//Act
439+
Expression<Func<Thing, Thing>> selectionMapped = mapper.MapExpression<Expression<Func<Thing, Thing>>>(selection);
440+
441+
//Assert
442+
Assert.NotNull(selectionMapped);
443+
}
444+
445+
[Fact]
446+
public void Map_Constructor_NoParams()
447+
{
448+
//Arrange
449+
Expression<Func<ThingModel, ThingModel>> selection = s => new ThingModel();
450+
451+
//Act
452+
Expression<Func<Thing, Thing>> selectionMapped = mapper.MapExpression<Expression<Func<Thing, Thing>>>(selection);
453+
454+
//Assert
455+
Assert.NotNull(selectionMapped);
456+
}
457+
432458
[Fact]
433459
public void Map__select_method_where_parent_type_is_grandchild_type()
434460
{

0 commit comments

Comments
 (0)