我试图通过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,但它也会出现同样的错误。我认为这与它使用早期绑定或其他方面的事实有关,但在调试时我无法获得任何有用的信息。
任何建议或帮助都会很棒,这应该很简单:/
答案 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");