我有一个表单,当我加载时,我填充开放发票(85,000+条记录)。用户可以选择“已关闭”的发票,我将我的daysOld组合框默认为60.(这允许我执行后台任务,检索过去60天内的所有已关闭发票(100,000多条记录)。然后,用户可以从下拉列表中选择60, 120, 360, 540, 720
。如果用户选择720
,我将重新运行查询并返回最近720天(320万条记录)的所有已结算发票。但是,如果用户选择这些较高天数之一,然后重新选择较小的一天(例如60)我不想重新运行查询,我想从我已有的记录集中提取我需要的数据。
_taClosed
是我根据所选天数返回的(对象)列表。
Dim tot = (From tak In _taClosed
Where tak.DateOfInvoice > DateTime.Now.AddDays(-1 * cmbDaysOld.SelectedItem)).CopyToDataTable()
请注意,运行linq查询需要5秒钟,这似乎很长一段时间。任何有关提高性能的建议都非常感谢。
答案 0 :(得分:3)
我唯一看到的是DateTime.Now.AddDays()
在lambda表达式中调用。在输入查询之前,您应该只计算一次:
Dim dateFrom = DateTime.Now.AddDays(-1 * cmbDaysOld.SelectedItem)
Dim tot = (From tak In _taClosed
Where tak.DateOfInvoice > dateFrom).CopyToDataTable()
但我认为这不会产生太大影响。
有了这么多记录,你应该考虑使用数据库而不是内存中的集合。
另外,您是否一次显示所有项目?当你只显示几个时(由于分页),检索所有记录是没有意义的。
答案 1 :(得分:1)
有320万条记录,我怀疑原始数据存储在搜索内存中的linq查询时会更快。
我会问你为什么要把这么多原始数据加载到第一个视图中。用户无法通读这么多数据的实用方法。
可以更好地编写您的查询以加载数据的聚合视图并将其呈现给用户。