从类列表中获取元素<Class>



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

现在,我想从名单中找到一位以他的名字命名的员工,但我不知道如何做到这一点,所以我们将非常感谢您的帮助。

使用LINQ查询:

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

这将返回第一个使用该名称的员工,如果没有找到,则返回null。要获取具有该名称的所有员工,请改用Where

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

使用List.FindAll 的非Linq方法

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

使用Equals方法向您展示如何忽略案例进行搜索。

如果您能够使用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);
}

只需使用LINQ

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

这将为您提供姓名匹配的员工的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);

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

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

请记住,这将返回IEnumerable<Employee>而不是IList<Employee>。两者之间有许多不同之处。

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

您可以使用循环,也可以使用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") {
        ...
    }
}

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

查看WHERE simple1和simple2的示例。

最好的方法是使用LINQ:

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

尝试使用的下一个代码片段

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

如果你想只找到一名员工,那么你可能想使用Single而不是Where,在我的情况下这更合理。如果您想找到符合该标准的第一位员工,请使用"first"而不是"Where"。

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

Employees.Where(emp=>emp.FirstName.Contains("符文"(&amp;emp。姓氏。包含("S"(;

最新更新