internal static IList <ContactLinkingSuggestion> GetSuggestions(CultureInfo culture, IList <ContactInfoForSuggestion> personContacts, IEnumerable <ContactInfoForSuggestion> otherContacts) { Dictionary <PersonId, ContactLinkingSuggestion> dictionary = new Dictionary <PersonId, ContactLinkingSuggestion>(); foreach (ContactInfoForSuggestion contactInfoForSuggestion in otherContacts) { if (!WellKnownNetworkNames.IsHiddenSourceNetworkName(contactInfoForSuggestion.PartnerNetworkId, contactInfoForSuggestion.ParentDisplayName)) { foreach (ContactInfoForSuggestion personContact in personContacts) { ContactLinkingSuggestion contactLinkingSuggestion = ContactLinkingSuggestion.Create(culture, personContact, contactInfoForSuggestion); if (contactLinkingSuggestion != null) { ContactLinkingSuggestion b; if (dictionary.TryGetValue(contactLinkingSuggestion.PersonId, out b)) { if (ContactLinkingSuggestion.Compare(contactLinkingSuggestion, b) > 0) { dictionary[contactLinkingSuggestion.PersonId] = contactLinkingSuggestion; } } else { dictionary.Add(contactLinkingSuggestion.PersonId, contactLinkingSuggestion); } } } } } List <ContactLinkingSuggestion> list = new List <ContactLinkingSuggestion>(dictionary.Values); list.Sort(new Comparison <ContactLinkingSuggestion>(ContactLinkingSuggestion.Compare)); if (list.Count > ContactLinkingSuggestion.MaximumSuggestions.Value) { list.RemoveRange(ContactLinkingSuggestion.MaximumSuggestions.Value, list.Count - ContactLinkingSuggestion.MaximumSuggestions.Value); } return(list); }
internal static int Compare(ContactLinkingSuggestion a, ContactLinkingSuggestion b) { Util.ThrowOnNullArgument(a, "a"); Util.ThrowOnNullArgument(b, "b"); int num = ContactLinkingSuggestion.Compare(a.SurnameMatch && a.GivenNameMatch, b.SurnameMatch && b.GivenNameMatch); if (num != 0) { return(num); } num = ContactLinkingSuggestion.Compare(a.AliasOfEmailAddressMatch, b.AliasOfEmailAddressMatch); if (num != 0) { return(num); } num = ContactLinkingSuggestion.Compare(a.PhoneNumberMatch, b.PhoneNumberMatch); if (num != 0) { return(num); } num = ContactLinkingSuggestion.Compare(a.PartialSurnameMatch, b.PartialSurnameMatch); if (num != 0) { return(num); } num = ContactLinkingSuggestion.Compare(a.PartialGivenNameMatch, b.PartialGivenNameMatch); if (num != 0) { return(num); } num = ContactLinkingSuggestion.Compare(a.PartialAliasOfEmailAddressMatch, b.PartialAliasOfEmailAddressMatch); if (num != 0) { return(num); } return(0); }