Dynamics CRM 2011 过滤从 Web 服务返回的数据

Posted

技术标签:

【中文标题】Dynamics CRM 2011 过滤从 Web 服务返回的数据【英文标题】:Dynamics CRM 2011 filtering data returned from web service 【发布时间】:2011-07-26 10:59:51 【问题描述】:

我试图通过 EntityReference 过滤数据,但没有成功。如果没有 where 子句,使用 where 子句运行良好,我会收到以下错误:

服务器没有提供有意义的回复;这可能是由 合同不匹配、会话过早关闭或内部 服务器错误。

这是我调用 CRMService 的方法:

/// <summary>
        /// Gets the categories.
        /// </summary>
        /// <returns></returns>
        public IEnumerable<category> GetCategoriesExcludingSomething()
        
            IEnumerable<category> data = CrmClient.categorySet.OrderBy(x => x.SubCategory).ThenBy(x => x.itf_name);

            return data.Where(x => x.SubCategory.ToString() == "SomethingToExclude");
        

我也尝试过使用 SubCategory.Name 但它给出了同样的错误。我认为这与它使用早期绑定或类似的东西有关,但在调试时我无法获得任何有用的信息。

任何建议或帮助都会很棒,这应该很容易:/

【问题讨论】:

【参考方案1】:

根据本文档:http://technet.microsoft.com/en-us/library/gg328328.aspx

LINQ 查询提供程序支持 LINQ 运算符的子集。不是 支持所有可以在 LINQ 中表达的条件。

orderBy 支持按实体属性排序,例如 Contact.FullName。

您可以做的是先使用 where 子句,然后使用 ToList() 方法。在此之后,您将拥有一个可以使用所有常见 Linq 查询的数据集合。

此外,尝试通过 EntityReference 进行 OrderBy 也不是好方法。您应该尝试这样订购:

OrderBy(x => x.SubCategory.Id)

where: 子句左侧必须是属性名,子句右侧必须是值。您不能将左侧设置为常数。子句的两边都不能是常数。 支持字符串函数 Contains、StartsWith、EndsWith 和 Equals

您可以在此处执行的操作是按 Id 或按名称过滤值(在这种情况下,这是您从 EntityReference 获得的唯一相关信息)。

Where(x => x.SubCategory.Name == "CategoryNameToExclude");

【讨论】:

以上是关于Dynamics CRM 2011 过滤从 Web 服务返回的数据的主要内容,如果未能解决你的问题,请参考以下文章

从 Microsoft Dynamics CRM 4.0 server迁移到 Microsoft Dynamics CRM 2013 Server

CDS 中预过滤的表/实体、系统视图或存储过程(基于 Dynamics CRM DB)

sql 在另一个用户的背景下阅读MS Dynamics CRM过滤视图

Dynamics CRM 2015/2016新特性之二十一:使用Web API查询记录

Dynamics CRM 2011 - 如何更改现有 CRM 实例的活动目录服务器?

EndpointNotFound 异常 - Dynamics CRM 2011