我想通过实体的属性集迭代,并为每个实体获取文本值。我可以通过获取属性类型和显式转换来实现这一点但是有没有办法在不管类型的情况下做到这一点?与this method ...
类似答案 0 :(得分:0)
我认为您无法在不测试和处理实体可能的特定字段类型的情况下获取文本值,因为某些字段类型具有更复杂的值,您需要决定你想从这个领域获得什么价值。我遇到了同样的情况,并最终建立了一个功能,为我做繁重的工作。基本上我在属性类型上做了一个case语句,并根据业务需求获得了我想要的值,这里是我使用的函数的一个例子:
Private Function GetAttributeValue(ByRef pEntity As Entity, ByRef pAttr As KeyValuePair(Of String, Object)) As String
Dim lstrValue As String = String.Empty
Select Case pAttr.Value.GetType
Case GetType(OptionSetValue)
lstrValue = String.Format("{0} - {1}", CType(pAttr.Value, OptionSetValue).Value.ToString(), pEntity.FormattedValues(pAttr.Key))
Case GetType(EntityReference)
lstrValue = CType(pAttr.Value, EntityReference).Id.ToString()
'... could also get the Name value from the EntityReference
Case GetType(Money)
lstrValue = CType(pAttr.Value, Money).Value.ToString()
Case GetType(Date)
lstrValue = CType(pAttr.Value, Date).ToString("MM/dd/yy hh:mm:ss")
Case GetType(Guid)
lstrValue = CType(pAttr.Value, Guid).ToString()
Case Else
'... assume a string and just return the attribute value, or do some other handling
End Select
Return lstrValue
End Function
一旦我有了这个功能,我就可以遍历我正在处理的实体上的属性,并获得一些文本值,代表每个字段的值,而不管字段类型如何。有一点需要注意,在我的示例中,我使用OptionSet
获取了.FormattedValues()
字段的字符串值,我相信只有在您的实体填充了Id
唯一标识符字段时才能使用它
答案 1 :(得分:0)
您可以使用GetFormattedAttributeValue
类的方法Entity
。
示例:
Entity myAccount = service.Retrieve("account", accountId, new ColumnSet(true));
string createdOn = myAccount.GetFormattedAttributeValue("createdon");