基于关系属性的odata过滤

时间:2014-10-16 11:26:56

标签: rest odata dynamics-crm microsoft-dynamics

我正在尝试根据名为" listcontact_association"的项目关系的一个方面过滤集合。它表示联系人和列表之间的N:N关系。

我可以通过以下方式检索整套设置:

/ContactSet?$select=listcontact_association,FirstName,LastName,EMailAddress1&$expand=listcontact_association

这给了我:

enter image description here

但我希望能够只根据guid获取属于特定列表的那些联系人:

ContactSet?$select=listcontact_association,FirstName,LastName,EMailAddress1&$expand=listcontact_association,FirstName,LastName,EMailAddress1&$filter=listcontact_association/ListId %20eq%20(guid%2787F2A0AF-A142-E411-93FA-000C29482C88%27)

这告诉我:

No property 'ListId' exists in type 'System.Collections.Generic.IEnumerable`1[[Microsoft.Xrm.Sdk.Entity, Microsoft.Xrm.Sdk, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]' at position 24.

我觉得有意义,因为可以有很多列表关联。

我是odata新手,无法弄清楚如何过滤我的数据,所以我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这是因为listcontact_association是一个集合,在这种情况下,你可以根据你的要求使用lamda表达式(这里只列出filter子句):

按任何listid过滤条件。

$filter=listcontact_association/any(a:a/ListId%20eq%20(guid%2787F2A0AF-A142-E411-93FA-000C29482C88%27))

按所有listid过滤匹配条件

$filter=listcontact_association/all(a:a/ListId%20eq%20(guid%2787F2A0AF-A142-E411-93FA-000C29482C88%27))