繁体   English   中英

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

[英]How can I filter a list using generics and Linq extension methods?

我正在尝试为系统编写一个通用的过滤器扩展方法,这样我就可以在任何列表上调用过滤器并传入字段名称及其值的字典以进行过滤。

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

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

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 语句并检查每个字段,如下所示:

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

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

我正在寻找类似的东西:

list = list.where(listobject.getField(key).contains(value))

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

在你的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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM