使自定义类可用于LINQ查询

时间:2013-11-29 14:36:21

标签: c# linq

我有一个基本的集合类,它只包含一个自定义对象的列表,保存在List变量中,以允许我使用这个[]索引。

但是,我现在想要使类能够从集合中的项目运行 LINQ查询

使用简化的类比,我可以通过

从列表中获得一名工作人员
Employeex = MyStaffList[Payroll];

...但我现在想做的是

var HREmps = from emp in StaffList
             where emp.Department == "HR"
             select emp;

下面是原型类定义......

public class StaffList
{
    List<Employee> lst = new List<Employee>();

    public StaffList()
    {
        /* Add Employees to the list */
    }

    public Employee this[string payroll]
    {
        get
        {
            Employee oRet = null;
            foreach (Employee emp in lst)
            {
                if (emp.Payroll.Equals(payroll, StringComparison.InvariantCultureIgnoreCase))
                {
                    oRet = emp ;
                    break;
                }
            }
            return (oRet);
        }
    }
}

public class Employee
{
    public string Payroll;
    public string Department;
    .
    .
    .
    .
}

1 个答案:

答案 0 :(得分:11)

您需要将类实现IEnumerable<Employee>以启用LINQ。这很容易做到(只有一种方法,它只能return lst.GetEnumerator();

然而,更简单的是直接从List<Employee>派生而不是从object派生。有没有理由你不这样做?