Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使自定义类可用于LINQ查询_C#_Linq - Fatal编程技术网

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

C# 使自定义类可用于LINQ查询,c#,linq,C#,Linq,我有一个基本的集合类,它只包装一个自定义对象的列表,保存在一个列表变量中,允许我使用这个[]索引 但是,我现在想让类可以访问,以便能够从集合中的项运行LINQ查询 用一个简单的类比,我只需做一件事就可以从名单中找到一名工作人员 Employeex = MyStaffList[Payroll]; …但我现在想做的是 var HREmps = from emp in StaffList where emp.Department == "HR" s

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

但是,我现在想让类可以访问,以便能够从集合中的项运行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;
    .
    .
    .
    .
}
公共类StaffList
{
List lst=新列表();
公共斯塔夫列表()
{
/*将员工添加到列表中*/
}
公共雇员此[字符串工资单]
{
得到
{
Employee-oRet=null;
foreach(lst中的员工emp)
{
if(emp.Payroll.Equals(Payroll,StringComparison.InvariantCultureInogoreCase))
{
oRet=emp;
打破
}
}
返回(oRet);
}
}
}
公营雇员
{
公共字符串工资单;
公共事务部;
.
.
.
.
}

您需要使类实现
IEnumerable
以启用LINQ。这很容易做到(只有一个方法,它只能
返回lst.GetEnumerator();


然而,更容易的是直接从
列表
派生,而不是从
对象
派生。你不这样做有什么原因吗?

两分钟内四次向上投票?这是一个好问题,需要提供更多信息:你尝试了什么(搜索网页),这段代码做什么?是的,就是这个…我试过IEnumerble和IEnumerator接口,但没有试过IEnumerble,至于“为什么不从列表中派生”,我从来没有想过要这么做…一天内学到了两个教训…谢谢Jon@Jon...“从列表中派生”的进一步说明-我试着让这个工作,然后遇到了这个…显然,从列表中派生是不可取的,所以我们切换到Collection@ChrisHammond:谢谢,记下以备将来参考。