在所有属性的对象列表中搜索

时间:2014-07-16 18:48:57

标签: .net c linq generics

我有一个名为Student的类,它有三个属性

  1. 学生否
  2. 学生姓名
  3. 结果
  4. 我创建了一个对象列表并绑定到Grid。

    我有一个要搜索的文本框,应根据输入的文本过滤网格。

    我想知道如何使用linq在泛型中编写代码来搜索对象列表的所有属性

1 个答案:

答案 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]