【发布时间】:2012-12-29 18:44:30
【问题描述】:
最终解决方案:
public class CustomOptionMetadata : OptionMetadata
{
public CustomOptionMetadata(OptionMetadata optionMetadata) : base()
{
this.Description = optionMetadata.Description;
this.ExtensionData = optionMetadata.ExtensionData;
this.Managed = optionMetadata.IsManaged;
this.Label = optionMetadata.Label;
this.MetadataId = optionMetadata.MetadataId;
this.Value = optionMetadata.Value;
}
public string MappedName { get; set; }
public bool? Managed { get; set; }
}
.
foreach (MappingEntity meAtt in mappingEntityList.FindAll(me => me.ParentID == meEnt.ID))
{
CRMOrganizationEntityAttribute crmOrganizationEntityAttribute = new CRMOrganizationEntityAttribute(meAtt.ID, meAtt.Name, true);
if (meAtt.IsPicklist)
{
List<OptionMetadata> optionMetadataList = GetAttributePickList(meEnt.Name, meAtt.Name);
if (optionMetadataList.Count > 0)
{
crmOrganizationEntityAttribute.OptionMetadataColl = optionMetadataList.Select<OptionMetadata, CustomOptionMetadata>(metadata => new CustomOptionMetadata(metadata)).ToList();
}
else
{
}
}
CRMOrgEnt.CRMAttributeNameList.Add(crmOrganizationEntityAttribute);
}
================================================ ==============================
我目前正在开发一个地图应用程序,它已经有很多自定义对象。为了限制类的查找和定义,我考虑过扩展我需要的现有类。
OptionMetaDataCollection 是 Microsoft.Xrm.SDK.Metadata 库的一部分,在其 Ilist 中有 OptionMetaData 对象。
现在我想创建这样的东西:
public partial class CustomOptionMetadataCollection : OptionMetadataCollection
{
public CustomOptionMetadataCollection() : base() { }
}
public partial class CustomOptionMetadata : OptionMetadata
{
public CustomOptionMetadata() : base() { }
public string MappedName { get; set; }
}
但是我如何将当前位于OptionMetadatacollection 中的Ilist<OptionMetaData> 更改为我的IList<CustomOptionMetaData>。我知道我可以创建自己的 CustomOptionMetaDataCollection 的 Ilist,但是我会(将我的想法放在代码的其余部分上)列出使用具有更高级集合类的类似东西。
我还想知道如何将OptionMetaDataCollection 对象映射到我的CustomOptionMetadataCollection。我可以创建一个循环,但我正在寻找一种更有效的映射方式。
非常感谢任何帮助。
【问题讨论】:
-
您的问题是如何从 Microsoft 定义的类中初始化自定义类?另外,我不明白您从自定义类中获得了什么好处......
-
请参阅下面的答案评论。感谢您的宝贵时间。
-
我会使用 Where,而不是 FindAll。 find all 将创建一个新列表,复制所有值,Where 将仅枚举您当前的列表。
标签: c# .net dynamics-crm-2011