Я пытаюсь написать общий метод расширения фильтра для системы, чтобы я мог вызвать фильтр для любого списка и передать словарь имен полей и их значений для фильтрации.
В настоящее время у меня есть метод для каждого типа в моей системе, но я пытаюсь объединить в один метод.
Вот что я до сих пор ... упростила, так что это только поиск текста:
public static List<T> Filter<T>(this List<T> model, string json)
{
JavaScriptSerializer ser = new JavaScriptSerializer();
Dictionary<string, object> searchFields = (Dictionary<string, object>)ser.DeserializeObject(json);
foreach (var key in searchFields.Keys)
{
// How do I perform the search?
}
return model;
}
Мой текущий фильтр является оператором переключения для каждой клавиши и проверяет каждое поле следующим образом:
switch(key)
{
case "Description":
list = list.Where(x => x.Description.ToLower().Contains(searchFields[key].ToString().ToLower())).ToList();
break;
}
Как получить доступ к свойству универсального объекта для его фильтрации? Я предполагаю, что мне нужно как-то размышление, но я не знаю синтаксис.
Я ищу что-то вроде:
list = list.where(listobject.getField(key).contains(value))
Возможно ли это? Заранее спасибо за помощь!