我最近经历过一个OptionSetValue,就像我的插件方法中的整数一样。以前,和所有其他OptionSetValues一样,为了检索整数值,我使用了模式:
localIntegerVariable = (new_myEntity.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute")).Value;
这不再适用于插件的其中一种方法。如果我把它当成一个整数,它就可以了。
localIntegerVariable = (new_myEntity.GetAttributeValue<int>("new_myOptionSetAttribute"));
奇怪的是,在我检索预图像实体之前,在同一插件的主要部分中,我将同一属性视为如下所示的OptionSetValue,并且它的工作正常。
int incominglocalIntegerVariable = temp.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute") == null ? _OSV_Empty : temp.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute").Value;
我已经验证了entities.cs文件中new_myOptionSetAttribute的定义是一个OptionSetValue。我还验证了CRM中的定义是一个OptionSet值。
有没有人经历过这个?
答案 0 :(得分:1)
下面的代码会抛出确切的错误,因为您尝试将右侧int
值分配给左侧OptionSetValue
变量:
InvalidCastException:无法转换类型为&#39; System.Int32&#39;的对象输入&#39; Microsoft.Xrm.Sdk.OptionSetValue&#39;
OptionSetValue localIntegerVariable;
localIntegerVariable = (new_myEntity.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute")).Value;
在这种情况下,localIntegerVariable
应为int
,因为.Value
将为您提供int
数据类型结果。
要保持相同的数据类型,请将其更改为
int localIntegerVariable;
localIntegerVariable = (new_myEntity.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute")).Value;
或
OptionSetValue localIntegerVariable;
localIntegerVariable = new_myEntity.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute");
最后一个示例更好,因为它在使用表达式null
.Value
之前检查temp.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute") == null ?
检查