如何在该程序的 Lambda 查询中返回 IList

本文关键字:返回 IList 查询 Lambda 程序 | 更新日期: 2023-09-27 18:14:38

我有员工类,它有3个属性,ID,名称,雇用日期。

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,我需要特定员工信息的所有详细信息。 我不知道我在哪里错过了它,它显示了有关返回类型的一些错误。"无法将布尔值转换为 IList"。请帮助我。

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

我将使用此函数让操作委托在控制台上编写。

var query= GetDetails(list, 4); 

对于此查询,我需要调用打印委托。

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

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

你应该

使用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);
}

或者,如果要改为从GetDetails()返回List<Employee>,则可以在List<T>上使用 ForEach() 方法来执行操作:

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

用作:

GetDetails(employees).ForEach(print);
我相信

每个Employee都有一个唯一的ID,那么为什么要返回List呢?您的方法将只返回一个员工,因为给定 ID 没有多个Employee实例。

可以使用 LINQ FirstOrDefault 方法:

private Employee GetEmployee( IEnumerable<Employee> list, int id )
{
     return list.FirstOrDefault( e => e.EmployeeId == id);
}

只需更改此行

 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();
 }

对于每个员工,Select投影(如果EmployeeId等于id(或(如果EmployeeId不是(。所以,你最终会得到无数的布尔值......你需要的是Where,就像弗雷德里克和铱星说的那样。