From 534c998552ec9dcdd83fc23c322eab0b3edfe50b Mon Sep 17 00:00:00 2001 From: root Date: Mon, 23 Feb 2026 21:51:01 +0100 Subject: [PATCH] Fix getter creation for value type declaring types --- DynamORM/Mapper/DynamicPropertyInvoker.cs | 29 +++++++++++++---------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/DynamORM/Mapper/DynamicPropertyInvoker.cs b/DynamORM/Mapper/DynamicPropertyInvoker.cs index 328f342..9f5eb59 100644 --- a/DynamORM/Mapper/DynamicPropertyInvoker.cs +++ b/DynamORM/Mapper/DynamicPropertyInvoker.cs @@ -123,18 +123,21 @@ namespace DynamORM.Mapper private Func CreateGetter(PropertyInfo property) { - if (property == null || !property.CanRead) - return null; - - var objParm = Expression.Parameter(typeof(object), "o"); - - return Expression.Lambda>( - Expression.Convert( - Expression.Property( - Expression.TypeAs(objParm, property.DeclaringType), - property.Name), - typeof(object)), objParm).Compile(); - } + if (property == null || !property.CanRead) + return null; + + var objParm = Expression.Parameter(typeof(object), "o"); + var target = property.DeclaringType.IsValueType + ? (Expression)Expression.Convert(objParm, property.DeclaringType) + : Expression.TypeAs(objParm, property.DeclaringType); + + return Expression.Lambda>( + Expression.Convert( + Expression.Property( + target, + property.Name), + typeof(object)), objParm).Compile(); + } private Action CreateSetter(PropertyInfo property) { @@ -276,4 +279,4 @@ namespace DynamORM.Mapper #endregion Type command cache } -} \ No newline at end of file +}