c# – 如何在CRM Dynamics中使用别名属性时从fetchedXML访问值?
我正在提取营销列表清单.正如我这样做,根据我使用intellisense的检查,这似乎是一次成功的操作.当我寻找…实体[0] .Attributes [“nick”]我得到一个对象(在其中的某个地方有正确的数据).但是我不能以编程方式访问它(相反,我必须像猴子一样点击,通过优点来折叠好东西).
事实上,我得到的实体应该使用下面的代码.问题是根据计算机它们不是字符串.它们是Microsoft.Xrm.Sdk.AliasedValue类型,我不知道如何访问它们内部的实际缺口. new Contact { Name = element.Attributes["nick"] as String,Mail = element.Attributes["mail"] as String } Intellisense说Value在那里(并且它也是正确的值)但我无法通过输入.Value来访问它.我怀疑我需要使用“as”或类似的东西,但此刻我被卡住了.任何提示?作为String,它应该工作,给我null … 我已经阅读了this article和其他几个喜欢它和我看到它的方式,我应该能够访问那里所有有趣的东西.我不能…… 我注意到以下代码为我提供了我非常想要获取的数据,但这不是一个专业的语法,可以吗?!说真的,它看起来像一个患有多动症和宿醉的高中生试图这样做…… new Contact { Name = ((Microsoft.Xrm.Sdk.AliasedValue)result.Entities[0].Attributes["nick"]).Value,Mail = ((Microsoft.Xrm.Sdk.AliasedValue)result.Entities[0].Attributes["mail"]).Value } 我的意思是,认真 – 这是一段丑陋的代码……必须有一个更好的方法!但是,我担心没有,因为this discussion似乎也在使用该语法…… 解决方法
查看
documention,Entity对象的Attributes属性属于AttributeCollection类型,它派生自DataCollection< string,Object>.
因此,对于每个密钥(“nick”,“mail”),都有一个对应的对象,可以是任何.NET类型.你必须将对象强制转换为正确的类型(正如你所做的那样)来访问你正在寻找的属性(或者使用反射,这肯定会更加丑陋,或者我认为在C#4.0中是 对于 因此无法进行强制转换,但您可以通过在文件顶部添加using语句并在分配给Contact之前定义每个AliasedValue的值来缩短代码并使代码更简洁.无论如何,我已经包含了每种数据检索的一个例子;你可以判断你的项目哪个更好. 使用铸造: using Microsoft.Xrm.Sdk; ... var nick = (AliasedValue)result.Entities[0].Attributes["nick"]; var mail = (AliasedValue)result.Entities[0].Attributes["mail"]; var contact = new Contact { Name = nick.Value,//Value is of type object; cast again for a more specific type Mail = mail.Value }; 使用反射: var nick = result.Entities[0].Attributes["nick"] .GetType() .GetProperty("Value") .GetValue(result.Entities[0].Attributes["nick"],null); var mail = result.Entities[0].Attributes["mail"] .GetType() .GetProperty("Value") .GetValue(result.Entities[0].Attributes["mail"],null); var contact = new Contact { Name = nick,Mail = mail }; 使用动态: dynamic nick = result.Entities[0].Attributes["nick"]; dynamic mail = result.Entities[0].Attributes["mail"]; var contact = new Contact { Name = nick.Value,//dynamic figures out the right property at runtime Mail = mail.Value }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |