如何使用泛型和Linq扩展方法过滤列表?

Iro*_*fin 2 c# linq generics reflection filter

我正在尝试为系统编写一个通用的Filter扩展方法,这样我就可以在任何List上调用filter并传入一个字段名称及其值来过滤.

我目前在我的系统中有每种类型的方法,但我正在尝试合并到一种方法.

这是我到目前为止...简化所以它只是文本搜索:

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;
    }
Run Code Online (Sandbox Code Playgroud)

我当前的过滤器是每个键上的switch语句,并按如下方式检查每个字段:

switch(key) 
{
    case "Description":
        list = list.Where(x => x.Description.ToLower().Contains(searchFields[key].ToString().ToLower())).ToList();
                    break;
}
Run Code Online (Sandbox Code Playgroud)

如何访问通用对象上的属性以对其进行过滤?我假设我需要以某种方式反思,但我不知道语法.

我正在寻找类似的东西:

list = list.where(listobject.getField(key).contains(value))
Run Code Online (Sandbox Code Playgroud)

这可能吗?在此先感谢您的帮助!

Ami*_*ail 6

foreach循环中尝试类似的东西

 model.Where(m => typeof(T).GetProperty(key).GetValue(m, null)==searchFields[key]);
Run Code Online (Sandbox Code Playgroud)