如何在此程序的Lambda查询中返回IList <T>

Rav*_*dag 0 c# linq lambda

我有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)},
};
Run Code Online (Sandbox Code Playgroud)

现在我需要编写一个函数来返回特定ID的IList.基于Id我需要特定员工信息的所有详细信息.我不知道我在哪里错过它,它显示有关返回类型的一些错误."无法将bool转换为IList".请帮我.

 private IList<Employee> GetDetails(List<Employee> list, int id)
{
    return list.Select(e => e.Employeeid == id)
}
Run Code Online (Sandbox Code Playgroud)

我将使用此函数为Action委托在控制台上写.

var query= GetDetails(list, 4); 
Run Code Online (Sandbox Code Playgroud)

对于此查询,我需要调用print delegate.

Action<Employee> print = e => Console.WriteLine(string.Format("{0} Hired on  {1}",e.EmployeeName,e.HireDate));
Run Code Online (Sandbox Code Playgroud)

Iri*_*ium 5

你应该使用Where,而不是Select,并且需要ToList()用来返回IList<Employee>:

private IList<Employee> GetDetails(List<Employee> list, int id)
{
    return list.Where(e => e.Employeeid == id).ToList();
}
Run Code Online (Sandbox Code Playgroud)

对于您的编辑,您可以使用标准foreach:

foreach (var employee in GetDetails(employees))
{
    print(employee);
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您要返回List<Employee>from GetDetails(),则可以使用ForEach()方法on List<T>来执行操作:

private List<Employee> GetDetails(List<Employee> list, int id)
{
    return list.Where(e => e.Employeeid == id).ToList();
}
Run Code Online (Sandbox Code Playgroud)

用作:

GetDetails(employees).ForEach(print);
Run Code Online (Sandbox Code Playgroud)