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

本文关键字:方法 过滤 列表 扩展 Linq 何使用 泛型 | 更新日期: 2023-09-27 18:00:45

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

目前,我的系统中每种类型都有一个方法,但我正在尝试合并为一个方法。

这是我迄今为止所拥有的。。。简化,所以它只是文本搜索:

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))

这可能吗?提前感谢您的帮助!

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

foreach循环中尝试类似的操作

 model.Where(m => typeof(T).GetProperty(key).GetValue(m, null)==searchFields[key]);
foreach (var key in searchFields.Keys)
{               
    model.Where(m => typeof(T).GetProperty(key).GetValue(m, null).Equals(SearchFields[key], StringComparison.OrdianlIgnoreCase);         
}
return model.ToList();