Как выполнить поиск по списку <T>с помощью строки ввода пользователя? - PullRequest
0 голосов
/ 20 марта 2019

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

            List<Contact> contacts = new List<Contact>();
        {
            contacts.Add(new Contact { firstName = "John", lastName = "Doe", phoneNumber = "7725551234", email = "johndoe@email.com" });
            contacts.Add(new Contact { firstName = "Kent", lastName = "Woods", phoneNumber = "7725551445", email = "kentwoods@email.com" });
            contacts.Add(new Contact { firstName = "Jane", lastName = "Doe", phoneNumber = "7725553355", email = "janedoe@email.com" });
            contacts.Add(new Contact { firstName = "Hank", lastName = "Fowland", phoneNumber = "7725558877", email = "hankfowland@email.com" });
            contacts.Add(new Contact { firstName = "Tracy", lastName = "Yates", phoneNumber = "7725552768", email = "tracyyates@email.com" });
            contacts.Add(new Contact { firstName = "Courtney", lastName = "Wall", phoneNumber = "7725556385", email = "courtneywall@email.com" });
            contacts.Add(new Contact { firstName = "Dawson", lastName = "Stokes", phoneNumber = "7725553098", email = "dawsonstokes@email.com" });
        };

И вот здесь я пытаюсь выполнить поиск:

            else if (userChoice == 3)
        {
            Console.Write("\nWhat would you like to search for?: ");
            string search = Console.ReadLine();
            IEnumerable<string> results = from contact in contacts
                                         where contacts.ToString().Contains(search)
                                         select contact.ToString();
            var result = contacts.Find(x => x.Contains(search) );
            Console.WriteLine("{0}", results.ToList());
        }

Я настолько глубоко в пробах и ошибках, что потерян.Спасибо за время!

Ответы [ 3 ]

3 голосов
/ 20 марта 2019

в вашем запросе contacts.ToString() будет выглядеть примерно так: List<Contact>, вам следует просто попытаться сравнить свои данные со свойствами каждого контакта (т. Е. Имя, фамилия, ...):

var result = contacts.Where(c => c.firsName.Contains(search) || c.lastName.Contains(search));
0 голосов
/ 20 марта 2019

То, что написал @Ashkan Mobayen Khiabani, за исключением опечатки в firs (t) Name:)

Также вы должны заполнить свой список, используя этот синтаксис, чтобы иметь более чистый код:

     var contacts = new List<Contact>
    {
        new Contact { firstName = "John", lastName = "Doe", phoneNumber = "7725551234", email = "johndoe@email.com" },
        new Contact { firstName = "Kent", lastName = "Woods", phoneNumber = "7725551445", email = "kentwoods@email.com" },
        new Contact { firstName = "Jane", lastName = "Doe", phoneNumber = "7725553355", email = "janedoe@email.com" }
    };
0 голосов
/ 20 марта 2019

Вы можете использовать предложение Linq Where, чтобы найти результат в соответствии с пользовательским вводом

public static void Main()
{
    List<Contact> contacts = new List<Contact>();
    contacts.Add(new Contact { firstName = "John", lastName = "Doe", phoneNumber = "7725551234", email = "johndoe@email.com" });
    contacts.Add(new Contact { firstName = "Kent", lastName = "Woods", phoneNumber = "7725551445", email = "kentwoods@email.com" });
    contacts.Add(new Contact { firstName = "Jane", lastName = "Doe", phoneNumber = "7725553355", email = "janedoe@email.com" });
    contacts.Add(new Contact { firstName = "Hank", lastName = "Fowland", phoneNumber = "7725558877", email = "hankfowland@email.com" });
    contacts.Add(new Contact { firstName = "Tracy", lastName = "Yates", phoneNumber = "7725552768", email = "tracyyates@email.com" });
    contacts.Add(new Contact { firstName = "Courtney", lastName = "Wall", phoneNumber = "7725556385", email = "courtneywall@email.com" });
    contacts.Add(new Contact { firstName = "Dawson", lastName = "Stokes", phoneNumber = "7725553098", email = "dawsonstokes@email.com" });
    string search = Console.ReadLine();
    var result = contacts.Where(c => c.firstName == search || c.lastName == search || c.phoneNumber == search || c.email == search).FirstOrDefault();


    Console.WriteLine(result.ToString()); // This will return all the values of Contact. Override ToString() function for you **Bonus
}

protected class Contact
{
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string phoneNumber { get; set; }
    public string email { get; set; }

    public override string ToString()
    {
        return "FirstName =" + firstName + "\t LastName = " + lastName + "\t PhoneNumber = " + phoneNumber + "\t Email = " + email;
    }
}

Здесь я рассмотрел, что пользовательский ввод может быть любым значением свойства из класса Contact

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...