我有Employee类,它有3个属性,ID,Name,HireDate。
var employees = new List<Employee>()
{
new Employee {Employeeid = 1, EmployeeName = "Ravi", HireDate = new DateTime(2007, 2, 23)},
new Employee {Employeeid = 2, EmployeeName = "Scott", HireDate = new DateTime(2007, 2, 23)},
new Employee {Employeeid = 3, EmployeeName = "Megan", HireDate = new DateTime(2003, 9, 2)},
new Employee {Employeeid = 4, EmployeeName = "Raj", HireDate = new DateTime(2010, 9, 23)},
new Employee {Employeeid = 5, EmployeeName = "Major", HireDate = new DateTime(2003, 9, 23)},
new Employee {Employeeid = 6, EmployeeName = "Kernel", HireDate = new DateTime(2011, 12, 3)},
};
现在我需要编写一个函数来返回特定ID的IList。基于Id我需要特定员工信息的所有详细信息。我不知道我在哪里错过它,它显示有关返回类型的一些错误。 “无法将bool转换为IList”。请帮帮我。
private IList<Employee> GetDetails(List<Employee> list, int id)
{
return list.Select(e => e.Employeeid == id)
}
我将使用此函数将Action委托写入控制台。
var query= GetDetails(list, 4);
对于此查询,我需要调用print delegate。
Action<Employee> print = e => Console.WriteLine(string.Format("{0} Hired on {1}",e.EmployeeName,e.HireDate));
答案 0 :(得分:5)
您应该使用Where
,而不是Select
,并且需要使用ToList()
来返回IList<Employee>
:
private IList<Employee> GetDetails(List<Employee> list, int id)
{
return list.Where(e => e.Employeeid == id).ToList();
}
对于您的修改,您可以使用标准foreach
:
foreach (var employee in GetDetails(employees))
{
print(employee);
}
或者,如果您要从List<Employee>
返回GetDetails()
,则可以使用ForEach()
上的List<T>
方法执行操作:
private List<Employee> GetDetails(List<Employee> list, int id)
{
return list.Where(e => e.Employeeid == id).ToList();
}
用作:
GetDetails(employees).ForEach(print);
答案 1 :(得分:1)
我相信每个Employee
都有一个唯一的ID,那么为什么要返回List
?
您的方法只返回一名员工,因为您没有给定ID的多个Employee
实例。
您可以使用LINQ FirstOrDefault方法:
private Employee GetEmployee( IEnumerable<Employee> list, int id )
{
return list.FirstOrDefault( e => e.EmployeeId == id);
}
答案 2 :(得分:1)
只需更改此行
private IList<Employee> GetDetails(List<Employee> list, int id)
{
return list.Select(e => e.Employeeid == id)
}
到
private IList<Employee> GetDetails(List<Employee> list, int id)
{
return list.Where(e => e.Employeeid == id).ToList();
}
答案 3 :(得分:0)
对于每位员工,Select
投影 true (如果EmployeeId
等于id
)或 false (如果EmployeeId
不是)。所以,你最终会得到一大堆布尔...
你需要的是Where
,就像弗雷德里克和铱星说的那样。