Я пытаюсь создать HTML-таблицу для журналов заказов для клиентов. Клиент определяется как (я много чего не учел):
public class Customer
{
public LazyList<Order> Orders { get; set; }
}
LazyList устанавливается при получении клиента:
public Customer GetCustomer(int custID)
{
Customer c = ...
c.Orders = new LazyList<Order>(_repository.GetOrders().ByOrderID(custID));
return c;
}
Модель журнала заказов:
public class OrderLogTableModel
{
public OrderLogTableModel(LazyList<Order> orders)
{
Orders = orders;
Page = 0;
PageSize = 25;
}
public LazyList<Order> Orders { get; set; }
public int Page { get; set; }
public int PageSize { get; set; }
}
и я передаю заказчику. Заказы после загрузки клиенту. Теперь журнал, который я пытаюсь сделать, выглядит примерно так:
<table>
<tbody>
<%
int rowCount = ViewData.Model.Orders.Count();
int innerRows = rowCount - (ViewData.Model.Page * ViewData.Model.PageSize);
foreach (Order order in ViewData.Model.Orders.OrderByDescending(x => x.StartDateTime)
.Take(innerRows).OrderBy(x => x.StartDateTime)
.Take(ViewData.Model.PageSize))
{
%>
<tr>
<td>
<%= order.ID %>
</td>
</tr>
<%
}
%>
</tbody>
</table>
Который работает нормально. Но проблема оценки ViewData.Model.Orders.Count () буквально занимает около 10 минут.
Я пробовал вместо этого использовать свойство ViewData.Model.Orders.Count, и результаты те же самые - занимают вечность.
Я также попытался вызвать _repository.GetOrders (). ByCustomerID (custID) .Count () непосредственно из представления, и это отлично выполняется в течение нескольких мс.
Кто-нибудь может увидеть причину, почему использование LazyList для простого подсчета займет так много времени? Кажется, что он пытается перебрать список при получении простого подсчета.