从列表中获取元素<;类>;的类
本文关键字:gt 的类 列表 lt 获取 元素 | 更新日期: 2023-09-27 17:50:53
我有一个名为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("符文"(&;emp。姓氏。包含("S"(;