我想找到使用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.
答案 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
}