c# -列表中ID为1的所有值

本文关键字:列表 ID | 更新日期: 2023-09-27 17:51:25

我得到了一个包含所有员工的List,现在我需要在一个新页面上深入到特定的员工。例如,我想从ID为1的员工获取所有值。在LINQ中有解决方案吗?这实际上是一个查询SELECT * FROM Employee WHERE id = 1;

class Employee
{
    public int EmployeeID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string Title { get; set; }
    public string TitleOfCourtesy { get; set; }
    public DateTime BirthDate { get; set; }
    public DateTime HireDate { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string Region { get; set; }
    public string PostalCode { get; set; }
    public string Country { get; set; }
    public string HomePhone { get; set; }
    public string Extension { get; set; }
    //public Image Photo { get; set; }
    public string Notes { get; set; }
    public int ReportsTo { get; set; }
    public string PhotoPath { get; set; }
}

我试过这样做,但它不起作用:

           List<Employee> employees = Database.getEmployees();
        var uniqUsers = employees.Where(x => employees.Contains(x.EmployeeID == 1)).ToList();

c# -列表中ID为1的所有值

其中employeeIEnumerable<Employee>类型

如果你想要一个记录:

var result = employee.FirstOrDefault(x => x.EmployeeID == 1); // Returns Employee

如果您期望多于1条记录:

var result = employee.Where(x => x.EmployeeID == 1); // Return IEnumerable<Employee>

请注意,当使用FirstOrDefault时,如果在您的集合中没有项目(或不匹配您的lambda),那么它将返回默认的T,在您的情况下将是Employee,它将为null。

如果您想要满足该标准的"单个"项,请使用Single Linq语句:

Employee employee = employees.Single(e => e.EmployeeID == 1);

Employee employee = employees.SingleOrDefault(e => e.EmployeeID == 1);

如果您希望查询返回null,而不是在列表中没有满足该标准的项时抛出异常。

EmployeeList为当前雇员列表。您可以使用LINQ过滤所需的详细信息,就像指定的查询一样,使用以下命令(IT将为您提供满足指定条件的所有子列表):

int empIdToSearch=1;
List<Employee> FilteredList=EmployeeList.Where(x=>x.EmployeeID ==empIdToSearch).ToList();

如果EmployeeID是唯一的,那么列表中将有一个具有特定ID的项目,您可以使用FirstOrDefault从满足条件的集合中获取第一个项目,即

Employee EmployeeObject= FilteredList.FirstOrDefault(x => x.EmployeeID == empIdToSearch);

您需要了解的概念是大多数linq查询是如何操作的。

当你说.Where(x => x.EmployeeID == 1)时,那么x是一个单独的雇员,就好像你说:

foreach(Employee x in employees)
{
   if(x.EmployeeID == 1)
     // take it
}
所以正确的语法应该是:

List<Employee> uniqUsers = employees.Where(x => x.EmployeeID == 1).ToList();

Single可选结果:

Employee uniqUser = employees.SingleOrDefault(x => x.EmployeeID == 1);

Single必选结果:

Employee uniqUser = employees.Single(x => x.EmployeeID == 1);

第一个可选结果:

Employee uniqUser = employees.FirstOrDefault(x => x.EmployeeID == 1);

第一个必选结果:

Employee uniqUser = employees.First(x => x.EmployeeID == 1);

可以通过两种方式从集合中获取记录。

Linq to sql like query

var employee= from emp in employees where emp.ID==1;

Linq to extension methods.

var employee = employees.Where(emp=>emp.ID==1);

Linq支持更接近SQL的查询语法。

var employee1 = from employee in employees where employee.EmployeeID == 1 select employee;
foreach (var x in employee1)
{
    Console.WriteLine(x.EmployeeID);
}

编译器将所有查询语法转换为方法语法。并不是所有的事情都可以用查询语法完成。"from"出现在"select"之前,所以自动完成功能更有用。重要的是要注意,linq查询在使用之前不会执行。foreach循环是本例中第一次使用它的地方。