【发布时间】:2009-02-17 20:38:12
【问题描述】:
我正在尝试为客户的订单日志创建一个 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; }
}
我在加载客户后传入 customer.Orders。现在我正在尝试制作的日志看起来像:
<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 进行简单计数需要这么长时间吗?在获得简单计数时,它似乎试图遍历列表。
【问题讨论】:
标签: c# asp.net asp.net-mvc linq-to-sql lazy-loading