Ich habe den folgenden Code geschrieben, um Mapping-Parameter von meiner Datenbank zu meinen Datentypen zu verarbeiten (vertraue mir Ich wünschte, ich könnte ein Std. ORM verwenden, aber das ist nicht machbar viele Gründe)Wie man einen Parameter während der Verwendung von Ausdruck setzt <Func<T>>
public void LoadDatabaseValue<T>(DataTable partData, string identifier, string mappingName, Expression<Func<T>> mappingProperty)
{
var partAttributeValue = mappingProperty.Name;
var memberExpression = (MemberExpression)mappingProperty.Body;
var prop = (PropertyInfo)memberExpression.Member;
try
{
var selectedRow = partData.Select($"partattributename = '{mappingName}'");
var selectedValue = selectedRow[0]["PartAttributeValue"];
var typedOutput = (T)Convert.ChangeType(selectedValue, typeof(T));
prop.SetValue(memberExpression.Expression, typedOutput, null);
}
catch (Exception exception)
{
_databaseImportError = true;
// code to log this error
}
Wenn ich versuche, das ich die folgende Ausnahme
{System.Reflection.TargetException: Object does not match target type.
at System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target)
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index) }
bekommen zu laufen, wenn ich es debuggen meine typedOutput Linien mit meiner Art der Immobilie, so dass ich bin mir nicht sicher, warum es wirft diese Ausnahme.
ich mit ihm zum Beispiel nenne
LoadDatabaseValue(partData, identifier, "Offset",() => Offset);
Sie eine 'Func' sind vorbei, aber erwartet, dass es' Expression> 'zu sein. Ändern Sie einen von ihnen zum gleichen Typ. –
Venky
@Venky Er ist in einem Ausdruck. – Servy