Поиск контактов с одинаковыми номерами телефонов с помощью Linq C#
У меня есть список контактов, где каждый контакт (сохраненный в таблице контактов) может иметь несколько номеров (сохраненных в другой таблице Contact_Phones)
public class Contact{
public int ID {get; set;}
public string First_Name {get; set;}
public string Last_Name {get; set;}
public List<Contact_Phones> Phones {get; set;}
}
public class Contact_Phones{
public int ID {get; set;}
public int Type {get; set;}
public string Phone_No {get; set;}
}
Теперь я хочу найти контакты с одинаковым phone_no с помощью Linq C# и объединить их.
3 ответа
Решение
var contactsWithduplicates = contacts
.Where(contact => contact.Phones.Any(phone =>
contacts.Any(contact2 => contac2 != contact && contact2.Phones.Contains(phone))))
.Distinct().ToList();
var query= ContactsRepo.GetAll()
.SelectMany(contact => contact.Phones)
.GroupBy(contactPhone => contactPhone.Phone_No)
.ToList();
Предполагая, что у вас есть контакты в списке под названием contacts
:
// Break into phones and contact id for example
var all_phones = from contact in contacts
from phone in contact.Phones
select new {contact_id = contact.ID, phone = phone.Phone_No};
// get only contacts that share the same phone
var duplicates = from entries in all_phones
group entries by entries.phone
into g where g.Count() >1
select g;