C# - List中ID为1的所有值

时间:2016-06-27 12:56:14

标签: c# linq

我有一个包含所有员工的列表,现在我需要在新页面上挖掘特定员工。我想从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();

6 个答案:

答案 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循环是本例中首次使用的循环。