コレクションに対して重いフィルタリングを行っています(これは、「データライン」のエントリのカプセル化されたリストにすぎません)。これらの行を 3 つのフィールド (Date (文字列)、Route (文字列)、および 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);
}