0

我有一个名为 Employee 的类,它代表公司中的每个员工。

public class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}

我创建了一个新的员工列表

public readonly List<Employee> Employees = new List<Employee>();

现在我想通过他\她的名字从列表中找到一名员工,但我不知道如何实现这一点,因此我们将非常感谢您的帮助和感谢。

4

11 回答 11

3

使用 LINQ 查询:

Employees.FirstOrDefault(emp => emp.FirstName == "Rune" && emp.LastName == "S");

这将为您返回该名称的第一个员工,或者如果没有找到,null. 要获取具有该名称的所有员工,请Where改用:

Employees.Where(emp => emp.FirstName == "Rune" && emp.LastName == "S");
于 2013-01-07T21:46:18.867 回答
2

非 Linq 方法使用List.FindAll

List<Employee> foundEmployees = Employees
    .FindAll(e => e.LastName.Equals(empName, StringComparison.OrdinalIgnoreCase));

使用该Equals方法向您展示如何忽略大小写进行搜索。

于 2013-01-07T21:47:52.080 回答
1

如果您能够使用 LINQ,您可以简单地查询列表:

Employees.Where(e => e.FirstName == "John" || e.LastName == "Doe");

或者,您也可以很容易地遍历列表并将任何匹配项添加到另一个结果列表中:

List<Employee> matches = new List<Employee>();

foreach(var employee in Employees)
{
    if(employee.FirstName == "John" || employee.LastName == "Doe")
        matches.Add(employee);
}
于 2013-01-07T21:45:56.453 回答
1

只需使用 LINQ

var employee = Employees.Where(e => e.LastName == lastname).FirstOrDefault();
于 2013-01-07T21:46:10.560 回答
1

将为您提供IEnumerable<Employee>姓名匹配的员工:

string firstName = "Bob";
string LastName = "Smith";
var employees = Employees.Where(e => e.FirstName == firstName && 
                                     e.LastName == lastName);

或者使用查询语法:

var employees = from e in Employees
                where e.FirstName == firstName && 
                      e.LastName == lastName
                select e;

如果应该只有一名员工符合该标准,则使用SingleOrDefault

Employee employee = Employees.SignleOrDefault(e => e.FirstName == firstName && 
                                                   e.LastName == lastName);
于 2013-01-07T21:46:11.253 回答
1

当您说“按他/她的名字查找”时,您的意思是指您正在寻找所有名为“John”的人吗?使用 LINQ,看起来像这样:

var johns = Employees.Where(e => e.FirstName == "John");

请记住,这将返回 anIEnumerable<Employee>而不是IList<Employee>. 两者之间存在许多差异。

.Where()是可用于查询和操作列表的众多扩展方法之一。

于 2013-01-07T21:46:24.790 回答
1

您可以使用循环,或使用 LINQ:

此表达式为您提供第一个姓氏为“Smith”的员工,或者null如果您的列表中没有人使用此姓氏:

var res = Employees.FirstOrDefault(e => e.LastName  == "Smith");

此循环允许您枚举所有名字为“John”的员工:

foreach (var employee in Employees.Where(e => e.FirstName  == "John")) {
    ...
}

您还可以列出通过给定过滤器的员工列表:

var smiths = Employees.Where(e => e.LastName  == "Smith").ToList();

如果原始列表不包含“Smith”,则结果列表将为空。

如果您不能使用 LINQ,则可以使用普通foreach循环:

foreach (var employee in Employees) {
    if (employee.LastName == "Smith") {
        ...
    }
}
于 2013-01-07T21:46:28.210 回答
1

尝试使用下一个代码片段

var firstName = "Jon";
var lastName = "Skeet";
var employees = Employees.Where(emp => emp.FirstName == firstName && emp.LastName == lastName);

如果您想准确地找到一名员工,那么您可能想要使用Single而不是Where,在我的情况下这更合理。如果您想找到符合该标准的第一个员工,请使用“First”而不是“Where”。

于 2013-01-07T21:46:40.613 回答
1

http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

查看 WHERE simple1 和 simple2 的示例。

于 2013-01-07T21:47:41.320 回答
1

最好的方法是使用 LINQ:

var employees = Employees.Where(e => e.FirstName.Equals("RuneS")).ToArray();
于 2013-01-07T21:48:49.317 回答
0

如果您需要通配符搜索使用包含。

Employees.Where(emp => emp.FirstName.Contains("Rune") && emp.LastName.Contains("S"));

于 2015-05-08T20:14:27.027 回答