通过搜索键C#的组合查找列表<t>项

时间:2017-05-30 12:16:02

标签: c# list

我想找到使用List分配给特定日期的员工的部门。 employeeID和date的组合将是唯一的,这意味着员工将在特定日期仅被分配到一个部门。

List<clsEmployee> _items = new List<clsEmployee>();

_items.Add(new clsEmployee() 
{EmpId=100,Date="05/05/2017",DeptAssigned="Grocery"});
_items.Add(new clsEmployee() 
{EmpId=100,Date="06/05/2017",DeptAssigned="Clothing"});
_items.Add(new clsEmployee() 
{EmpId=100,Date="07/05/2017",DeptAssigned="Crockery"});

_items.Add(new clsEmployee() 
{EmpId=101,Date="05/05/2017",DeptAssigned="cosmetics"});
_items.Add(new clsEmployee() 
{EmpId=101,Date="06/05/2017",DeptAssigned="gardening"});
_items.Add(new clsEmployee() 
{EmpId=101,Date="07/05/2017",DeptAssigned="grocery"});


  clsEmployee objEmployee = new clsEmployee ();
  objEmployee = _items.Find(x => x.EmpId == 100);
//i want something like objEmployee = _items.Find(x => x.EmpId==100 
 //&& x => x.Date="05/05/2017");
string DeptAssignedToEmp = objEmployee.DeptAssigned;
//expected result - grocery in this case.

2 个答案:

答案 0 :(得分:6)

简单,使用&&而不使用其他x =>

clsEmployee objEmployee = _items.Find(x => x.EmpId == 100 && x.Date == "05/05/2017");

您也可以使用LINQ:

clsEmployee objEmployee = _items.FirstOrdefault(x => x.EmpId == 100 && x.Date == "05/05/2017");

附注:不要使用字符串作为日期属性,而是DateTime

答案 1 :(得分:0)

Find可能不是最适合使用的,因为从理论上讲,可能会有更多项目符合您的标准。也许您应该考虑使用Where

var matchingItems = _items.Where(x => x.EmpId==100 && x.Date=="05/05/2017");

Where会返回IEnumerable,因为该集合中可能有更多项符合您的条件。

您可以使用FirstOrDefault,如果集合中没有匹配项,则返回null,否则将返回集合中的第一个对象。

var matchingItem = _items.FirstOrDefault(x => x.EmpId==100 && x.Date=="05/05/2017");
if(matchingItem == null)
{
    //nothing matched your criteria
}