使自定义类可用于LINQ查询

7

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

然而,现在我想使这个类能够通过from item in collection LINQ查询来访问

使用一个简化的比喻,我可以通过只是执行列表中的代码来获取员工:

Employeex = MyStaffList[Payroll];

但是我现在想要做的是

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

以下是原型类定义...
请注意,proto-type 中的连字符应更改为连字符,以便正确解释。
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;
    .
    .
    .
    .
}

两分钟内四个赞?为了让这个问题成为一个“好问题”,它需要更多的信息:你尝试过什么(搜索网络),这段代码是做什么的? - CodeCaster
1个回答

12

为了启用LINQ,您需要让您的类实现IEnumerable<Employee>。这很容易实现(只有一个方法,可以直接return lst.GetEnumerator();)。

不过,更加简单的做法是直接从List<Employee>派生,而不是从object派生。您没有这样做的原因吗?


没错,就是这个……我之前尝试过使用IEnumerble和IEnumerator接口,但没有尝试过IEnumerble<T>。至于为什么不从List<Employee>派生,我从来没有想过……一天学到了两个教训……谢谢Jon。 - Chris Hammond
@Jon... 关于“从List<Employee>派生”的问题 - 我试图让它工作,然后发现了这个链接https://dev59.com/Cm435IYBdhLWcg3whAWx... 显然,不建议从List<T>派生,所以已经切换到Collection<T>。 - Chris Hammond
@ChrisHammond:谢谢,已经注意到了,以备将来参考。 - Jon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接