我正在对集合进行一些繁重的过滤(这只不过是“数据线”条目的封装列表)。我需要在 3 个字段(日期(字符串)、路线(字符串)和 ConsolidationCode(字符串))上“合并”这些行。
提取 3 个不同的列表工作得很快。我更担心三重foreach...我会说正常的“完整_DealerCaseSetComplete 包含5000 个条目。日期大约是5,路线大约是100,合并大约是350-500。
我写了以下方法。它完全符合我的要求,但计算时间非常慢。也许你们可以指导我更快地执行代码。
如果您需要任何其他代码(实际上很简单,请询问。
private void FillDataGridView()
{
//
_LocalGridControl.Invoke(CreateDataGrid);
//Filter by Date
List<string> Dates = _DealerCaseSetComplete.Data.Select(rec => rec.DateAdded).Distinct().ToList();
//Filter by Route
List<string> Routes = _DealerCaseSetComplete.Data.Select(rec => rec.Route).Distinct().ToList();
//Filter by Consolidation
List<string> Consolidations = _DealerCaseSetComplete.Data.Select(rec => rec.DealerConsolidationCode).Distinct().ToList();
foreach(string d in Dates)
{
foreach(string r in Routes)
{
foreach(string c in Consolidations)
{
List<DealerCaseLine> Filter = _DealerCaseSetComplete.Data.Where(rec => rec.DateAdded == d &&
rec.Route == r &&
rec.DealerConsolidationCode == c).ToList();
if(Filter.Count > 0)
_LocalGridControl.Invoke(AddLineToDataGrid, Filter);
}
}
}
_LocalGridControl.Invoke(SortDataGrid);
}