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查询记录