Мой глаз! Хотел бы я иметь возможность редактировать.
Вот мое решение проблемы:
// This should be in your controller
var q = from item in new iSppms.DataAccess.IncidentRepository()
group item by new {
item.Supplier.Id,
item.Supplier.Name,
item.Supplier.Plant }
into supplier
select new {
SupplierId = supplier.Key.Id,
SupplierName = supplier.Key.Name,
SupplierPlant = supplier.Key.Plant,
Years = from incident in supplier
let year = incident.IncidentDate.Year
where year <= EndYear and year >= StartYear
group incident by year into incidentForYear
select incidentForYear.DownTime.ToIntOrDefault()
}
<%
foreach (var row in q)
{ %>
<tr>
<td>
<%= incident.SupplierName %>
</td>
<td>
<%= incident.SupplierPlant %>
</td>
<% for(var y = StartYear; y < EndYear; ++y)
{
var year = row.Years[y]; %>
<td>
<%= year.Sum() %>
</td>
<% } %>
</tr>
<% } %>
И это метод расширения, чтобы сделать преобразование более приятным.
public static int ToIntOrDefault(this string value)
{
int result;
Int32.TryParse(value, out result);
return result;
}
Обратите внимание, что в вашем представлении слишком много кода. Работа по выбору того, что будет отображаться, должна выполняться в вашем контроллере, включая преобразование в целые числа. Представление должно просто слепо перебирать коллекции (можно утверждать, что Sum () также должна выполняться в контроллере).