2

我正在尝试获取在先前列表中找到其 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();

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

4

1 回答 1

4

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

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

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

  1. 重新编写查询以使用更自然的联接。
  2. 如果无法进行连接,您可以使用 Dynamic LinqORcustomerIDs. 这将类似于Enumerable.Contains.

请参阅我的答案或对“如何获得今天的所有生日?”问题的接受答案。有两种不同的方法来实现这一点。

于 2012-08-30T17:59:32.083 回答