Вы можете использовать метод FindAll (), который принимает предикат. Вот базовый пример.
List<string> stringList = new List<string>(new string[]{"Smith", "Johnson", "Jordan","Doe"});
List<string> filteredStringList = stringList.FindAll(x => x == "Smith");
Также метод Find возвращает один элемент.
Существует также пример проекта на MSDN для выполнения динамических запросов LINQ как в IEnumerable, так и в IQueryable. Вы можете использовать класс DynamicQueryable из него. Вот ссылка . Проект находится внутри проекта C # samples.