我有一个名为Student的类,它有三个属性
我创建了一个对象列表并绑定到Grid。
我有一个要搜索的文本框,应根据输入的文本过滤网格。
我想知道如何使用linq在泛型中编写代码来搜索对象列表的所有属性
答案 0 :(得分:0)
首先,我会创建一个扩展来搜索对象的属性。
public static class MyExtensions
{
public static bool HasPropertyWithFilter(this object obj, string filter)
{
foreach (var prop in obj.GetType().GetProperties())
{
var val = prop.GetValue(obj);
var str = (val ?? new object()).ToString();
if (str.ToLower().Contains(filter.ToLower()))
return true;
}
return false;
}
}
那么你可以在任何地方使用它......
string filterStr = "N2"; // could be Textbox.Text
var filteredList =
list.Where (o => o.HasPropertyWithFilter(filterStr));
这是第一次刮擦,可能会有一些情况需要你做好准备(例如,如果属性有一个索引器,例如obj.Item[3]
)