2014-01-09 3 views
1

Мой проект отслеживает часы каникул, используемые для каждого сотрудника. Я хотел бы отобразить сумму часов, используемых над результатом foreach. Индекс каникул убирает данные для выбранного сотрудника.MVC4 - Как я могу суммировать результат списка foreach?

Модель 1

public class Employee 
    { 
     public int EmployeeID { get; set; } 
     public string LastName { get; set; } 
     public string FirstMidName { get; set; } 

    public virtual ICollection<Vacation> Vacation { get; set; } 
    } 

Модель 2

public class Vacation 
    { 
     public int VacationID { get; set; } 
     public int EmployeeID { get; set; } 
     [DataType(DataType.Date)] 
     public DateTime EventDate { get; set; } 
     public int Hours { get; set; } 

     public virtual Employee Employee { get; set; } 
} 

контроллер для модели 2

public class VacationController : Controller 
    { 
     private Context db = new Context(); 

     // 
     // GET: /Vacation/ 

     public ActionResult Index([Bind(Prefix = "id")]int employeeId) 
     { 
      var Employee = db.Employee.Find(employeeId); 
      if (Employee != null) 
      { 
       return View(Employee); 
      } 
      return HttpNotFound(); 
     } 

Вид

<table> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Employee.LastName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.EventDate) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Hours) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Notes) 
     </td> 
      </tr> 
} 

</table> 
+0

Используйте ['IEnumerable .Sum'] (http://msdn.microsoft.com/en-us/library/bb534734.aspx) – Styxxy

ответ

3

Вы можете рассчитать сумму часов со следующим выражением:

var sum = Model.Vacation.Sum(vacation => vacation.Hours); 

Вы можете добавить его в верхней части вашего зрения:

Sum of hours: @Model.Vacation.Sum(vacation => vacation.Hours) 
+0

Спасибо! Я все еще зелёный при программировании. – Hugh

0

Если вы можете установить другое поле в контроллере, вы можете суммировать список перед отправкой его в представление.

(с помощью расширения LINQ)

var totalHours = employee.Vacation.Aggregate((acc, val) => acc + val); 
Смежные вопросы