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

时间:2011-07-26 10:59:51

标签: where dynamics-crm-2011 entityreference

我试图通过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 个答案:

答案 0 :(得分:2)

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

  

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

     

<强> ORDERBY   支持按实体属性排序,例如Contact.FullName。

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

此外,尝试OrderBy EntityReference并不是一个好方法。您应该尝试这样订购:

OrderBy(x => x.SubCategory.Id)
  

其中:子句的左侧必须是属性名称,子句的右侧必须是值。您不能将左侧设置为常量。该子句的两个边都不能是常量。   支持String函数Contains,StartsWith,EndsWith和Equals

你可以在这里做的是通过Id或名称过滤值(在这种情况下,这是您从EntityReference获得的唯一相关信息)。

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