更新列表对象

时间:2014-01-31 13:28:48

标签: c# linq

我有对象列表,我想更新对象的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。

1 个答案:

答案 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循环会更清晰(假设employeeHoursListList<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()
    }
}