diff --git a/src/Mapster.Core/Utils/ProjectToTypeVisitors.cs b/src/Mapster.Core/Utils/ProjectToTypeVisitors.cs
index 5ee11e7a..324effe0 100644
--- a/src/Mapster.Core/Utils/ProjectToTypeVisitors.cs
+++ b/src/Mapster.Core/Utils/ProjectToTypeVisitors.cs
@@ -5,7 +5,7 @@ namespace Mapster.Utils
{
public sealed class TopLevelMemberNameVisitor : ExpressionVisitor
{
- public string? MemeberName { get; private set; }
+ public string? MemberName { get; private set; }
public override Expression Visit(Expression node)
{
@@ -15,8 +15,8 @@ public override Expression Visit(Expression node)
{
case ExpressionType.MemberAccess:
{
- if (string.IsNullOrEmpty(MemeberName))
- MemeberName = ((MemberExpression)node).Member.Name;
+ if (string.IsNullOrEmpty(MemberName))
+ MemberName = ((MemberExpression)node).Member.Name;
return base.Visit(node);
}
diff --git a/src/Mapster.EFCore.Tests/EFCoreTest.cs b/src/Mapster.EFCore.Tests/EFCoreTest.cs
index 6fba5c15..1a61eabc 100644
--- a/src/Mapster.EFCore.Tests/EFCoreTest.cs
+++ b/src/Mapster.EFCore.Tests/EFCoreTest.cs
@@ -117,6 +117,37 @@ public void MergeIncludeWhenUsingEFCoreProjectToType()
first.Enrollments.Count.ShouldBe(1);
first.LastName.ShouldBe("Alexander");
}
+
+ ///
+ /// https://github.com/MapsterMapper/Mapster/issues/875
+ ///
+ [TestMethod]
+ public void NotMemberNameEFCoreProjectToType_not_Error()
+ {
+ var options = new DbContextOptionsBuilder()
+ .UseInMemoryDatabase(Guid.NewGuid().ToString("N"))
+ .Options;
+ var context = new SchoolContext(options);
+ DbInitializer.Initialize(context);
+
+ var config = new TypeAdapterConfig();
+
+ config
+ .NewConfig()
+ .Map(dest => dest.LastName, src => src.GetLastName());
+
+ Should.NotThrow(() =>
+ {
+ var query = context.Students
+ .Include(x => x.Enrollments.OrderByDescending(x => x.StudentID).Take(1))
+ .EFCoreProjectToType(config);
+ });
+
+ }
+
+
+
+
}
public class StudentDto
diff --git a/src/Mapster.EFCore.Tests/Models/Student.cs b/src/Mapster.EFCore.Tests/Models/Student.cs
index 36127fde..69a863e8 100644
--- a/src/Mapster.EFCore.Tests/Models/Student.cs
+++ b/src/Mapster.EFCore.Tests/Models/Student.cs
@@ -11,5 +11,6 @@ public class Student
public DateTime EnrollmentDate { get; set; }
public ICollection Enrollments { get; set; }
+ public string GetLastName () { return LastName; }
}
}
diff --git a/src/Mapster.EFCore/EFCoreExtensions.cs b/src/Mapster.EFCore/EFCoreExtensions.cs
index 4ed597f0..d93e2f6c 100644
--- a/src/Mapster.EFCore/EFCoreExtensions.cs
+++ b/src/Mapster.EFCore/EFCoreExtensions.cs
@@ -82,7 +82,7 @@ public override Expression Visit(Expression node)
var memberv = new TopLevelMemberNameVisitor();
memberv.Visit(item);
- IncludeExpression.TryAdd(memberv.MemeberName, item);
+ IncludeExpression.TryAdd(memberv.MemberName, item);
}
}
return base.Visit(node);
diff --git a/src/Mapster/Adapters/BaseClassAdapter.cs b/src/Mapster/Adapters/BaseClassAdapter.cs
index 4e246dc6..41208035 100644
--- a/src/Mapster/Adapters/BaseClassAdapter.cs
+++ b/src/Mapster/Adapters/BaseClassAdapter.cs
@@ -50,7 +50,7 @@ select fn(src, destinationMember, arg))
s.Visit(getter);
- if (arg.Settings.ProjectToTypeResolvers.TryGetValue(s.MemeberName, out var match))
+ if (s.MemberName != null && arg.Settings.ProjectToTypeResolvers.TryGetValue(s.MemberName, out var match))
{
arg.Settings.Resolvers.Add(new InvokerModel
{