Example #1
0
        private static People FilterByMembership(BasicPerson[] candidates, Organization organization)
        {
            // Get the organization tree

            Organizations orgTree = organization.ThisAndBelow();

            // Build a lookup table of this organization tree. For each person in 'people'
            // that has at least one membership in an organization in the lookup table,
            // add that person to the final result.

            Dictionary <int, BasicOrganization> lookup = new Dictionary <int, BasicOrganization>();

            foreach (Organization org in orgTree)
            {
                lookup[org.Identity] = org;
            }

            // Get the list of all memberships

            Dictionary <int, List <BasicParticipation> > memberships =
                SwarmDb.GetDatabaseForReading()
                .GetParticipationsForPeople(LogicServices.ObjectsToIdentifiers(candidates));

            People result = new People();

            foreach (BasicPerson basicPerson in candidates)
            {
                bool memberOfOrganization = false;

                if (memberships.ContainsKey(basicPerson.Identity))
                {
                    foreach (BasicParticipation membership in memberships[basicPerson.Identity])
                    {
                        if (lookup.ContainsKey(membership.OrganizationId))
                        {
                            memberOfOrganization = true;
                        }
                    }
                }

                if (memberOfOrganization)
                {
                    result.Add(Person.FromBasic(basicPerson));
                }
            }

            return(result);
        }