关于C#:使自定义类对LINQ查询可用

Making a custom class availabe to LINQ queries

本问题已经有最佳答案,请猛点这里访问。

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

但是,现在我想使类可访问,以便能够从集合Linq查询中的项运行

用一个简单的类比,我可以通过做一个

1
Employeex = MyStaffList[Payroll];

…但我现在想做的是

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

下面是原型类定义……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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;
    .
    .
    .
    .
}


为了启用Linq,需要使类实现IEnumerable。这很容易做到(只有一种方法,它只能执行ecx1(1))。

然而,更容易的是直接从List派生,而不是从object派生。你不这么做有什么原因吗?