gpt4 book ai didi

c# - Asp.Net MVC - Rob Conery 的 LazyList - Count() 或 Count

转载 作者:行者123 更新时间:2023-11-30 21:25:35 24 4
gpt4 key购买 nike

我正在尝试为客户的订单日志创建一个 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 属性,结果是一样的 - 需要永远。

我还尝试过直接从 View 调用 _repository.GetOrders().ByCustomerID(custID).Count() 并在几毫秒内完美执行。

有人能看出使用 LazyList 获取简单计数需要这么长时间的原因吗?在获取简单计数时,它似乎试图遍历列表。

最佳答案

LazyList 在第一次使用时加载所有数据,因此您在调用 Count 时加载列表中的所有订单。从数据库中获取所有数据,实例化对象等。当您调用 _repository.GetOrders().ByCustomerID(custID).Count() 时,它只是计算数据库中的行数并返回一个数字。

关于c# - Asp.Net MVC - Rob Conery 的 LazyList - Count() 或 Count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/558615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com