gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:18:38 24 4
gpt4 key购买 nike

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

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

这是我到目前为止所拥有的......经过简化,因此它只是文本搜索:

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;
}

如何访问通用对象的属性来过滤它?我认为我需要某种程度的反射,但我不知道语法。

我正在寻找类似的东西:

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

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

最佳答案

foreach 循环中尝试类似的操作

 model.Where(m => typeof(T).GetProperty(key).GetValue(m, null)==searchFields[key]);

关于c# - 如何使用泛型和 Linq 扩展方法过滤列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6523283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com