Skip to content

Commit 72f5ebb

Browse files
authored
Merge pull request #124 from csboling/v4.1.2
[v4.1.2] avoid turning MemberAccess expressions of literal types into Constants
2 parents 9d3ab17 + c1ee3a3 commit 72f5ebb

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/AutoMapper.Extensions.ExpressionMapping/XpressionMapperVisitor.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ protected override Expression VisitMember(MemberExpression node)
5757
var baseExpression = node.GetBaseOfMemberExpression();
5858
if (baseExpression?.NodeType == ExpressionType.Constant)
5959
{
60+
if (node.Type.IsLiteralType())
61+
return node;
62+
6063
return this.Visit
6164
(
6265
Expression.Constant

tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/XpressionMapper.Structs.Tests.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,33 @@ public void Can_map_listeral_child_property_of_local_variable_in_filter()
166166
Assert.NotNull(mappedfilter);
167167
}
168168

169+
[Fact]
170+
public void Ignore_member_expressions_where_type_is_literal_and_node_type_is_constant()
171+
{
172+
// Arrange
173+
var config = new MapperConfiguration(c =>
174+
{
175+
c.CreateMap<GarageModel, Garage>()
176+
.ReverseMap()
177+
.ForMember(d => d.Color, opt => opt.MapFrom(s => s.Truck.Color));
178+
c.CreateMap<TruckModel, Truck>()
179+
.ReverseMap();
180+
});
181+
182+
config.AssertConfigurationIsValid();
183+
var mapper = config.CreateMapper();
184+
185+
GarageModel garage = new GarageModel { Color = "Blue", Truck = new TruckModel { Color = "Red", Year = 1999 } };
186+
Expression<Func<GarageModel, bool>> filter = m => m.Color == garage.Color;
187+
188+
//Act
189+
var mappedFilter = mapper.MapExpression<Expression<Func<Garage, bool>>>(filter);
190+
var mappedrhs = ((BinaryExpression)mappedFilter.Body).Right;
191+
192+
//Assert
193+
Assert.Equal(ExpressionType.MemberAccess, mappedrhs.NodeType);
194+
}
195+
169196
[Fact]
170197
public void Can_map_local_variable_literal_in_filter()
171198
{

0 commit comments

Comments
 (0)