我有一个名为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>();
现在我想通过他的名字从名单中找到一名员工,但我不知道如何实现这一目标,所以我们非常感谢您的帮助。
答案 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<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”));