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();
其中employee
为IEnumerable<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循环是本例中第一次使用它的地方。