c#crm动态。如何在GetAttributeValue <t>(fieldname)上动态传递T的数据类型字段

时间:2017-01-12 01:29:01

标签: c# entity dynamics-crm dynamics-crm-2011 crm

entity.GetAttributeValue<T>(fieldname)上传递值(数据类型和字段名)的良好做法是什么?目前我看到的是:entity.GetAttributeValue<string>(address)。如果没有在.GetAttributeValue方法上专门传递那些参数(字符串,地址),有没有更好的方法呢?

目前我有这样的代码:

var prop = typeof(PersonAddress).GetProperties(); 
string address;
foreach(var p in prop)
{
  address = entity.GetAttributeValue<p.PropertyType>(p.name)
}

p.PropertyType

中不接受GetAttributeValue<T>作为参考类型

1 个答案:

答案 0 :(得分:0)

您需要使用反射调用GetAttributeValue泛型方法,然后通过提供类型来构造它:

var getAttributeValueMethod = typeof(Microsoft.Xrm.Sdk.Entity).GetMethod("GetAttributeValue");
foreach (var property in typeof (PersonAddress).GetProperties())
{
    var generic = getAttributeValueMethod.MakeGenericMethod(property.PropertyType);
    var attributeValue = generic.Invoke(entity,
                                        new object[] {
                                        property.Name.ToLowerInvariant()});
}

致谢:Jon Skeet