You must use AddLink methods to perform the joins.
This should be what you need:
QueryExpression query = new QueryExpression("systemuser"); query.ColumnSet = new ColumnSet(new string[] { "systemuserid" }); query.Distinct = true; query.Criteria = new FilterExpression(); query.Criteria.AddCondition("businessunitid", ConditionOperator.Equal, ((EntityReference)entity.Attributes["new_unit"]).Id); query.AddLink("systemuserroles", "systemuserid", "systemuserid"). AddLink("role","roleid", "roleid"). LinkCriteria.AddCondition("name", ConditionOperator.Equal, "MyRoleName"); var users = organizationService.RetrieveMultiple(query);
And if you can easily get a RoleId, you can skip the Add link in Entity Role and just add your LinkCriteria condition to the SystemUserRoles object:
QueryExpression query = new QueryExpression("systemuser"); query.ColumnSet = new ColumnSet(new string[] { "systemuserid" }); query.Distinct = true; query.Criteria = new FilterExpression(); query.Criteria.AddCondition("businessunitid", ConditionOperator.Equal, ((EntityReference)entity.Attributes["new_unit"]).Id); query.AddLink("systemuserroles", "systemuserid", "systemuserid"). LinkCriteria.AddCondition("roleid", ConditionOperator.Equal, roleIdGuid); var users = organizationService.RetrieveMultiple(query);
Daryl source share