Предложение C # Linq where в соответствии с именем свойства

Допустим, у меня есть следующий класс:

public class Person { 

    public string FirstName { get; set; }
    public string SurName { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }

}

Кроме того, у меня есть следующий метод а И я обращаюсь к личным данным через репозиторий.

public IEnumerable<Person> getPeople(string searchField, string searchTerm) { 

    //_repo.GetAll() returns IEnumerable<Person>
    var model = _repo.GetAll(); 

    //Need the logic here for filtering

    return model;
}

Как видите, я получаю два параметра для метода: searchField и searchTerm .

searchField - это имя поля, значение которого будет использоваться для фильтрации. searchTerm - это значение, которое будет использоваться для сравнения с полученным значением (извините, если я не совсем понимаю, но это все, что я могу придумать)

Обычно я бы сделал следующее: следующим образом:

public IEnumerable<Person> getPeople(string searchField, string searchTerm) { 

    //_repo.GetAll() returns IEnumerable<Person>
    var model = _repo.GetAll(); 

    switch(searchField) { 

        case "FirstName":
            model = model.Where(x => x.FirstName == searchTerm);
            break;

        case "SurName":
            model = model.Where(x => x.SurName == searchTerm);
            break;

        //Keeps going
    }

    return model;

}

Что будет работать нормально. Но если я внесу изменения в свой класс, этот код будет изменен, чтобы сломаться или не иметь некоторых функций, если я добавлю новые свойства этого класса.

Я ищу примерно следующее:

ПРИМЕЧАНИЕ:

Этот приведенный ниже код полностью принадлежит моему воображению, и такой вещи не существует.

model = model.Where(x => x.GetPropertyByName(searchField) == searchTerm);

Я летаю здесь слишком высоко, если это невозможно, или веду себя полным идиотом, если для этого уже есть встроенный способ?

8
задан tugberk 11 October 2011 в 13:24
поделиться