Microsoft Xrm:无法通过语言订购IQueryable <knowledgearticle>

时间:2018-12-17 15:18:16

标签: c# dynamics-crm xrm

我只是想按他们的语言订购一组KnowledgeArticle。 我的第一个猜测是:

var SPRSet = _XrmServiceContext.KnowledgeArticleSet
            .Where(c => c.IsInternal == false)
            .Where(c => c.StateCode == Xrm.KnowledgeArticleState.Published)
            .OrderBy(s => s.LanguageLocaleId.Name)

这给了我以下错误:

  

System.NotSupportedException`:''orderBy'调用必须指定属性名称。'

然后我尝试通过执行以下操作来加载LanguageLocale实体:

SPRSet.OrderBy(s => _XrmOrganizationService.Retrieve(s.LanguageLocaleId.LogicalName, s.LanguageLocaleId.Id, new ColumnSet("name")).ToEntity<Xrm.LanguageLocale>().Name);

或类似的内容:

SPRSet.OrderBy(s => _XrmOrganizationService.Retrieve(s.LanguageLocaleId.LogicalName, s.LanguageLocaleId.Id, new ColumnSet("name")).GetAttributeValue<string>("name"));

两者都给我以下错误:

  

System.ServiceModel.FaultException`1:
   'KnowledgeArticle'实体不包含Name ='name'和NameMapping ='Logical'的属性。 MetadataCacheDetails:ProviderType =动态,StandardCache = True,IsLoadedInStagedContext = False,时间戳= 62358974,MinActiveRowVersion = 62358974'

调试时,当我评估集合的第一项上的表达式时,LanguageLocale实体加载工作正常:

var languageName = _XrmOrganizationService.Retrieve(SPRSet.First().LanguageLocaleId.LogicalName, SPRSet.First().LanguageLocaleId.Id, new ColumnSet("name")).ToEntity<Xrm.LanguageLocale>().Name

TitleArticlePublicNumber上进行的其他排序都可以正常工作。

1 个答案:

答案 0 :(得分:1)

我启动了XrmToolbox的元数据浏览器来查看。

您看到的问题可能与以下事实有关,例如客户的name字段之类的实体将标志IsRetrievable设置为true

而LanguageLocale的name已将IsRetrievable设置为false

帐户:

Account

LanguageLocale:

LanguageLocale

我不确定您可以为此做些什么。您可能必须想出另一种方法来将语言信息存储在KnowledgeArticle上。