Linq queries and optionSet labels, missing formatted value
我正在执行一个简单的查询 linq 以从选项集中检索标签。似乎缺少选项集的格式化值。有人知道为什么没有生成吗?
最好的问候
抱歉,不清楚的帖子。我发现了问题,以及作为 formattedvalue 丢失键的原因。
问题在于您检索属性的方式。使用此查询:
1 2 3 4 5 6 7 | var invoiceDetails = from d in xrmService.InvoiceSet where d.InvoiceId.Value.Equals(invId) select new { name = d.Name, paymenttermscode = d.PaymentTermsCode } |
我正在检索选项集的正确 int 值,但我需要的只是文本。我以这种方式更改了查询:
1 2 3 4 5 6 7 | var invoiceDetails = from d in xrmService.InvoiceSet where d.InvoiceId.Value.Equals(invId) select new { name = d.Name, paymenttermscode = d.FormattedValues["paymenttermscode"] } |
在这种情况下,我遇到了一个错误,指出密钥不存在。经过多次尝试,我尝试同时传递键值和选项集文本,并且该尝试效果很好。
1 2 3 4 5 6 7 8 | var invoiceDetails = from d in xrmService.InvoiceSet where d.InvoiceId.Value.Equals(invId) select new { name = d.Name, paymenttermscode = d.PaymentTermsCode, paymenttermscodeValue = d.FormattedValues["paymenttermscode"] } |
我的猜测是,要检索与该选项??集关联的正确文本,在该特定实体中,您也需要检索 int 值。
我希望这会有所帮助。
最好的问候
由于几个原因,您的问题相当令人困惑。我将假设您说您尝试"从
必须查询选项集元数据。
这是我写的一个扩展方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public static class OrganizationServiceHelper { public static string GetOptionSetLabel(this IOrganizationService service, string optionSetName, int optionSetValue) { RetrieveOptionSetRequest retrieve = new RetrieveOptionSetRequest { Name = optionSetName }; try { RetrieveOptionSetResponse response = (RetrieveOptionSetResponse)service.Execute(retrieve); OptionSetMetadata metaData = (OptionSetMetadata)response.OptionSetMetadata; return metaData.Options .Where(o => o.Value == optionSetValue) .Select(o => o.Label.UserLocalizedLabel.Label) .FirstOrDefault(); } catch { } return null; } } |
RetrieveOptionSetRequest 和 RetrieveOptionSetResponse 在 Microsoft.Xrm.Sdk.Messages 上。
这样称呼它:
1 | string label = service.GetOptionSetLabel("wim_continent", 102730000); |
如果您要多次查询同一个选项集,我建议您编写一个返回 OptionSetMetadata 而不是标签的方法;然后在本地查询 OptionSetMetadata。多次调用上述扩展方法会导致同一个查询被反复执行。