【问题标题】:c# crm dynamics. how to dynamically pass datatype field of T on GetAttributeValue<T>(fieldname)c# crm 动态。如何在 GetAttributeValue<T>(fieldname) 上动态传递 T 的数据类型字段
【发布时间】:2017-01-12 01:29:00
【问题描述】:

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

目前我有这样的代码:

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

p.PropertyTypeGetAttributeValue&lt;T&gt; 中不被接受为引用类型

【问题讨论】:

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


    【解决方案1】:

    你需要通过反射调用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 2010-11-20
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      相关资源
      最近更新 更多