2016-03-10 2 views
0

У меня есть класс с телефонными абонентами и второй класс с номерами телефонов. У одного абонента может быть немного номера телефона, но один номер телефона может быть связан только с одним абонентом. В основной системе я вижу все вызовы всех подписчиков. Есть ли более простой и быстрый способ найти владельца номера телефона, чем проверить каждого из абонентов в цикле?Эффективное решение для поиска объекта другого объекта

public class Subscribers{ 
int clientID; 
string name=""; 
string surname=""; 
string address=""; 
List<Phones> allPhones= new List<Phones>; 
} 

public class Phones{ 
string number=""; 
} 
+3

«Эффективное решение» называется * база данных *. –

+0

используйте запрос LINQ. –

+1

Моя жена и я разделяем номер телефона (последний стационарный телефон на Земле). Почему у двух подписчиков нет одинакового телефона? Ваша модель не ограничивает его. Если бы был реализован «Phone.SubscriberID», то это было бы. Хотя вы все равно сможете иметь экземпляр того же номера, принадлежащий двум подписчикам. –

ответ

1

Использование Linq это довольно просто.

public IEnumerable<Subscribers> FindSubscriber(
     IEnumerable<Subscribers> subscribers, string phoneNumber) 
{ 
    return 
     from subscriber in subscribers 
     where subscriber.allPhones.Any(p => p.number == phoneNumber) 
     select subscriber; 
} 

Это вернет список Subscribers, у которого есть этот номер телефона.

Оффтопик, но важно: изменить название. Подписчики подразумевают список подписчиков, но это не так. Это делает даже этот небольшой фрагмент кода не столь читаемым, как вы бы хотели. Посмотрите, как запутанные выглядят этот метод параметры:

IEnumerable<Subscribers> subscribers

Это простое изменение поможет другим читателям вашего кода большого времени:

IEnumerable<Subscriber> subscribers

Смежные вопросы