获取逻辑名称的显示名称

时间:2015-03-31 05:51:21

标签: c# dynamics-crm crm

我有一个我需要检索显示名称的实体的逻辑名称列表。

例如我有

List<string> _list=new List<string>();
_list.Add("address_City")
_list.Add("first_name")

它们的显示名称是地址城市名字

RetrieveEntityRequest req = new RetrieveEntityRequest();
req.RetrieveAsIfPublished = true;
req.LogicalName = "account";
req.EntityFilters = EntityFilters.Attributes;

RetrieveEntityResponse resp = (RetrieveEntityResponse)_orgService.Execute(req);

for (int iCnt = 0; iCnt < resp.EntityMetadata.Attributes.ToList().Count; iCnt++)
{
    if(resp.EntityMetadata.Attributes.ToList()[iCnt].DisplayName.LocalizedLabels.Count>0)
    {
        string displayName = resp.EntityMetadata.Attributes.ToList()[iCnt].DisplayName.LocalizedLabels[0].Label;
        string logicalName = resp.EntityMetadata.Attributes.ToList()[iCnt].LogicalName;

    }
}

这段代码检索所有记录。有没有办法创建一些自定义查询,我可以传递这个List<string>并检索显示名称?

1 个答案:

答案 0 :(得分:3)

Linq会很棒。只需获取逻辑名称列表并返回显示名称列表,如下所示:

List<string> _list = new List<string>()
                    {
                        "address_City",
                        "first_name"
                    };

List<string> _displayList = new List<string>();

if (entityMetaData.Attributes.Any())
{
    _displayList.AddRange(from lName in _list 
                          select (entityMetaData.Attributes.FirstOrDefault(n => n.LogicalName.Equals(lName))) 
                          into attribute 
                          where attribute.DisplayName.UserLocalizedLabel != null 
                          select attribute.DisplayName.UserLocalizedLabel.Label);
}

使用logicalName和displayName返回字典时,可以使用相同的逻辑。您对实体请求的回复已经包含了所有元数据,因此您不会浪费太多时间来筛选数据并获得所需内容。