我有一个包含所有员工的列表,现在我需要在新页面上挖掘特定员工。我想从ID为1的员工那里获取所有值。在LINQ中有解决方法吗? 它实际上是一个Query 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();
答案 0 :(得分:4)
employee
的类型为IEnumerable<Employee>
如果您期待1条记录:
var result = employee.FirstOrDefault(x => x.EmployeeID == 1); // Returns Employee
如果您期望超过1条记录:
var result = employee.Where(x => x.EmployeeID == 1); // Return IEnumerable<Employee>
请注意,如果您的收藏中没有项目(或与您的lambda不匹配),则使用FirstOrDefault
时会返回默认T
,在您的情况下将Employee
它将为null。
答案 1 :(得分:2)
如果您想要符合该标准的“单个”项目,请使用Single
Linq语句:
Employee employee = employees.Single(e => e.EmployeeID == 1);
或
Employee employee = employees.SingleOrDefault(e => e.EmployeeID == 1);
如果您希望查询返回null
而不是在列表中没有符合该条件的项目时抛出异常。
答案 2 :(得分:1)
让EmployeeList
是当前的员工列表。您可以使用LINQ来过滤所需的详细信息,就像使用此命令查询一样(IT将为您提供满足指定条件的所有子列表):
int empIdToSearch=1;
List<Employee> FilteredList=EmployeeList.Where(x=>x.EmployeeID ==empIdToSearch).ToList();
如果EmployeeID
是唯一的,那么列表中将有一个具有特定ID的项目,您可以使用FirstOrDefault
从集合中获取满足条件的第一项.ie。,< / p>
Employee EmployeeObject= FilteredList.FirstOrDefault(x => x.EmployeeID == empIdToSearch);
答案 3 :(得分:1)
您需要获得的概念是大多数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();
单个可选结果:
Employee uniqUser = employees.SingleOrDefault(x => x.EmployeeID == 1);
单一强制性结果:
Employee uniqUser = employees.Single(x => x.EmployeeID == 1);
第一个可选结果:
Employee uniqUser = employees.FirstOrDefault(x => x.EmployeeID == 1);
第一个强制性结果:
Employee uniqUser = employees.First(x => x.EmployeeID == 1);
答案 4 :(得分: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);
答案 5 :(得分:0)
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循环是本例中首次使用的循环。