Skip to content

Flattened properties via IncludeMembers don't get mapped correctly in expressions #151

@Xriuk

Description

@Xriuk

This time I think this issue is related to this library.
I have a model and dtos like this:

public class Category{
  [...]
  
  public string? Name {get; set;}
}

public class Product{
  [...]
  
  public Category? Category {get; set;}
}


public class ProductDTO{
  [...]
  
  public string? CategoryName {get; set;}
}

If I create the maps "manually", everything works:

CreateMap<Product, ProductDTO>()
  [...]
  .ForMember(p => p.CategoryName, c => c.MapFrom(p => p.Category!.Name));

I can then query it regularly:

Db.Products!.UseAsDataSource(_mapper.ConfigurationProvider).For<ProductDTO>()
  .FirstOrDefault(p => p.CategoryName == "MyCategory");

But if I try to include the Category entity:

CreateMap<Category, ProductDTO>()
  [...]
  .ForMember(p => p.CategoryName, c => c.MapFrom(c => c.Name));

CreateMap<Product, ProductDTO>()
  [...]
  .IncludeMembers(p => p.Category);

Then I get an exception in the query:

'Property 'String CategoryName' is not defined for type '[...].Product' Arg_ParamName_Name'

Here's the full stack trace:

   in System.Linq.Expressions.Expression.Property(Expression expression, PropertyInfo property) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/MemberExpression.cs: riga 284
   in System.Linq.Expressions.Expression.MakeMemberAccess(Expression expression, MemberInfo member) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/MemberExpression.cs: riga 398
   in System.Linq.Enumerable.Aggregate[TSource,TAccumulate](IEnumerable`1 source, TAccumulate seed, Func`3 func) in /_/src/libraries/System.Linq/src/System/Linq/Aggregate.cs: riga 54
   in System.Linq.Expressions.MemberExpression.Accept(ExpressionVisitor visitor) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/MemberExpression.cs: riga 68
   in System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/ExpressionVisitor.cs: riga 35
   in AutoMapper.Mappers.ExpressionMapper.MappingVisitor.VisitBinary(BinaryExpression node) in /_/src/AutoMapper.Extensions.ExpressionMapping/ExpressionMapper.cs: riga 106
   in System.Linq.Expressions.BinaryExpression.Accept(ExpressionVisitor visitor) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/BinaryExpression.cs: riga 310
   in System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/ExpressionVisitor.cs: riga 35
   in AutoMapper.Mappers.ExpressionMapper.MappingVisitor.VisitLambdaExpression[T](Expression`1 expression) in /_/src/AutoMapper.Extensions.ExpressionMapping/ExpressionMapper.cs: riga 170
   in System.Linq.Expressions.Expression`1.Accept(ExpressionVisitor visitor) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/LambdaExpression.cs: riga 290
   in System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/ExpressionVisitor.cs: riga 35
   in System.Linq.Enumerable.Aggregate[TSource,TAccumulate](IEnumerable`1 source, TAccumulate seed, Func`3 func) in /_/src/libraries/System.Linq/src/System/Linq/Aggregate.cs: riga 54
   in System.Linq.Expressions.Expression`1.Accept(ExpressionVisitor visitor) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/LambdaExpression.cs: riga 290
   in System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/ExpressionVisitor.cs: riga 35
   in System.Linq.Expressions.ExpressionVisitor.VisitUnary(UnaryExpression node) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/ExpressionVisitor.cs: riga 540
   in System.Linq.Expressions.UnaryExpression.Accept(ExpressionVisitor visitor) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/UnaryExpression.cs: riga 84
   in System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/ExpressionVisitor.cs: riga 35
   in System.Linq.Expressions.ExpressionVisitor.Visit(ReadOnlyCollection`1 nodes) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/ExpressionVisitor.cs: riga 69
   in AutoMapper.Mappers.ExpressionMapper.MappingVisitor.GetConvertedMethodCall(MethodCallExpression node) in /_/src/AutoMapper.Extensions.ExpressionMapping/ExpressionMapper.cs: riga 76
   in AutoMapper.Mappers.ExpressionMapper.MappingVisitor.VisitMethodCall(MethodCallExpression node) in /_/src/AutoMapper.Extensions.ExpressionMapping/ExpressionMapper.cs: riga 65
   in System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/MethodCallExpression.cs: riga 108
   in System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/ExpressionVisitor.cs: riga 35
   in System.Linq.Expressions.ExpressionVisitor.Visit(ReadOnlyCollection`1 nodes) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/ExpressionVisitor.cs: riga 69
   in AutoMapper.Mappers.ExpressionMapper.MappingVisitor.GetConvertedMethodCall(MethodCallExpression node) in /_/src/AutoMapper.Extensions.ExpressionMapping/ExpressionMapper.cs: riga 76
   in AutoMapper.Mappers.ExpressionMapper.MappingVisitor.VisitMethodCall(MethodCallExpression node) in /_/src/AutoMapper.Extensions.ExpressionMapping/ExpressionMapper.cs: riga 65
   in System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) in /_/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/MethodCallExpression.cs: riga 108
   in AutoMapper.Extensions.ExpressionMapping.Impl.SourceInjectedQueryProvider`2.ConvertDestinationExpressionToSourceExpression(Expression expression) in /_/src/AutoMapper.Extensions.ExpressionMapping/Impl/SourceInjectedQueryProvider.cs: riga 320
   in AutoMapper.Extensions.ExpressionMapping.Impl.SourceInjectedQueryProvider`2.Execute[TResult](Expression expression) in /_/src/AutoMapper.Extensions.ExpressionMapping/Impl/SourceInjectedQueryProvider.cs: riga 82
   in System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source) in /_/src/libraries/System.Linq.Queryable/src/System/Linq/Queryable.cs: riga 1064

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions