我有对象列表,我想更新对象的Break属性,其中breakflag = 1及其下一个和上一个记录。
class EmployeeHour
{
int recordID{get;set;}
string Break{get;set;}
DateTime TimeIn {get;set;}
DateTime TimeOut {get;set;}
int BreakFlag{get;set;}
}
List<EmployeeHour> listEH=(from item in employeeHoursList
where item.BreakFlag==1
select item).Foreach(itme=>item.Break=(employeeHoursList[i].Timeout-employeeHoursList[i].TimeIn).ToString()).ToList();
所以在这里我只想用Time diff设置break属性。在TimeIn和TimeOut之间只为那些objcet whoes breakflag是一个。和该对象的TimeOut,其中BeakFlag == 1和列表中该对象旁边的TimeIn。
答案 0 :(得分:3)
听起来你要做的就是这样:
List<EmployeeHour> listEH=
(from item in employeeHoursList
where item.BreakFlag == 1
select item).ToList();
listEH.ForEach(item => item.Break = (item.TimeOut - item.TimeIn).ToString());
这会使用当前项item.Break
和.TimeOut
修改当前.TimeIn
。
更新似乎想要使用列表中的上一个或下一个项目修改item.Break
。在这种情况下,您可能根本不应该使用Linq或ForEach
。一个简单的for
循环会更清晰(假设employeeHoursList
是List<T>
,数组或类似):
for(var i = 0; i < employeeHoursList.Count; i++)
{
if (employeeHoursList[i].BreakFlag == 1 && (i + 1) < employeeHoursList.Count)
{
employeeHoursList[i].Break = (employeeHoursList[i].TimeOut - employeeHoursList[i + 1].TimeIn).ToString()
}
}