试图执行WHERE IN:无效的'where'条件。实体成员正在调用无效的属性或方法

时间:2012-08-30 15:09:24

标签: linq dynamics-crm-2011

我正在尝试获取在上一个列表中找到AccountID的案例列表。

错误发生在以下的最后一行:

// Gets the list of permissions for the current contact
var perms = ServiceContext.GetCaseAccessByContact(Contact).Cast<Adx_caseaccess>();

// Get the list of account IDs from the permissions list
var customerIDs = perms.Select(p => p.adx_accountid).Distinct();

// Get the list of cases that belong to any account whose ID is in the `customerID` list
var openCases = (from c in ServiceContext.IncidentSet where customerIDs.Contains(c.AccountId) select c).ToList();

我不确定错误在谈论的是什么“无效属性”。代码编译,我只是在运行时得到错误。

1 个答案:

答案 0 :(得分:3)

问题是CRM Linq Provider。它不支持Linq-to-objects提供程序提供的所有可用选项。在这种情况下,CRM不支持Enumerable.Contains()方法。

  

<强>,其中:   子句的左侧必须是属性名称和   该条款的右侧必须是一个值。你不能设置左侧   一个常数。该子句的两个边都不能是常量。   支持字符串功能包含 StartsWith EndsWith ,以及   <强>等于

您可以通过以下两种方式解决此问题:

  1. 重写您的查询以使用更自然的联接。
  2. 如果无法加入,您可以使用动态Linq为OR中的每个项目生成customerIDs子句列表。这与Enumerable.Contains类似。
  3. 请参阅我的回答或问题"How to get all the birthdays of today?"的接受答案,了解两种不同的方法。