【发布时间】:2020-01-14 23:54:45
【问题描述】:
我在 C# 中有一个数据表,其中包含大约 8-10k 行。
我需要将这些行插入到对象列表中。现在我正在一个一个地做,但显然插入和显示需要很长时间。
是否有可能以更快的方式做到这一点?
var resultList = aggResults.ExtractRows(row => new ActivitySummaryGrouped
{
TimeSlot = row.Field<DateTime>("timestamp").ConvertUtcTimeToMountainTime(),
Product = row.ExtractItemOrDefault(QueryField.Product.ToString(), product),
Client = row.ExtractItemOrDefault(QueryField.Client.ToString(), client),
Host = row.ExtractItemOrDefault(QueryField.Host.ToString(), host)
});
没有错误,但是将大量数据从 Datatable 插入到 List 需要很长时间。
我们没有使用实体框架。我们正在从弹性搜索中获取数据。 我可以实现分页来显示数据,但由于我们需要计算存在的数据行总数的平均值、总计和其他计算等,所以我不能使用相同的方法。 ExtractRows 是一个扩展方法,看起来像这样:
public static List<T> ExtractRows<T>(this DataTable data, Func<DataRow, T> fieldExtractor)
{
var resultIterator = data.AsEnumerable();
return resultIterator.Select(fieldExtractor).ToList();
}
前端是 Angular JS,我们在网格中显示数据。
【问题讨论】:
-
通常这可以通过分页结果来解决。在这里,您有数百万个问题,但由于相同的原因(性能),您每页只会看到 15/30/50(您的选择)
-
你有实体框架吗?除了这种方式,您究竟是如何连接到数据库的?
-
ExtractRows和ExtractItemOrDefault是你写的扩展方法吗?我问这个是因为您可能正在对数据集进行多次枚举。您应该显示其余代码。你如何填写 aggResults 以及 ExtractRows 正在做什么,如果你写的话。 -
我已经更新了我的问题。请看一看。
-
您的目标是什么:Winforms、WPF、ASP..?您应该始终正确标记您的问题,以便人们可以在问题页面上看到它! - 你不应该显示 10k 行!与显示分开进行所有计算!需要时间的是显示部分!另外:你在哪里显示数据??
标签: c# asp.net asp.net-mvc list datatable