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