从类</class>的List <class>中获取元素

时间:2013-01-07 21:44:08

标签: c# linq list linq-to-objects

我有一个名为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>();

现在我想通过他的名字从名单中找到一名员工,但我不知道如何实现这一目标,所以我们非常感谢您的帮助。

11 个答案:

答案 0 :(得分:3)

使用LINQ查询:

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

这将使您返回该名称的第一名员工,或者如果找不到,则null。要使所有员工都拥有该名称,请改为使用Where

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

答案 1 :(得分:2)

使用List.FindAll

的非Linq方法
List<Employee> foundEmployees = Employees
    .FindAll(e => e.LastName.Equals(empName, StringComparison.OrdinalIgnoreCase));

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

答案 2 :(得分:1)

如果你能够使用LINQ,你可以简单地查询List:

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);
}

答案 3 :(得分:1)

只需使用LINQ

var employee = Employees.Where(e => e.LastName == lastname).FirstOrDefault();

答案 4 :(得分:1)

This会为您提供一个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);

答案 5 :(得分:1)

当你说“按他/她的名字找”时,你的意思是说你正在寻找所有名叫“约翰”的人吗?使用LINQ,看起来像这样:

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

请注意,这会返回IEnumerable<Employee>而不是IList<Employee>。两者之间存在许多差异。

.Where()many extension methods中的一个,可用于查询和操作列表。

答案 6 :(得分: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") {
        ...
    }
}

答案 7 :(得分:1)

尝试使用下一个代码段

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

如果您只想找到一名员工,那么您可能希望使用Single代替Where,这在我看来更合理。如果您想找到符合该标准的第一位员工,请使用“First”而不是“Where”。

答案 8 :(得分:1)

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

查看WHERE simple1和simple2的示例。

答案 9 :(得分:1)

执行此操作的最佳方法是使用LINQ:

var employees = Employees.Where(e => e.FirstName.Equals("RuneS")).ToArray();

答案 10 :(得分:0)

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

Employees.Where(emp =&gt; emp.FirstName.Contains(“Rune”)&amp;&amp; emp.LastName.Contains(“S”));