問題描述:
有一個數據集合,數據量有幾萬條、十幾萬條,類型是 List<a'> ,里面有一個字段是部門id(departmentid),假如說現在有很多個公司,有些公司有多個部門,在循環遍歷獲取每個公司的所有部門對應的記錄時,速度非常慢,
如果集合包含10 萬條記錄,有一千多個公司,每一個公司可能都需要花上 1 秒甚至超過 1 秒的時間,把所有公司遍歷一下需要幾十分鍾的時間。
解決方法:
因為實在是太慢了,所以我就想有沒有效率高、速度快的方法?換種寫法會不會解決這個問題?即,不使用 Contains 方法!
后來,我直接遍歷一個公司下的所有部門,然后獲取與部門id相等的記錄。結果,數據差不多秒出,效率提升了幾百倍甚至近千倍!
參考代碼:
//獲取該客戶對應的depids var thedepids = depls.Where(d => d.employerid == c.employerid).Select(d => d.accountid);
//var count = buylogls.Count(l => thedepids.Contains(l.departmentid)); //棄用的寫法
//高效的寫法 int count = 0; foreach(var id in thedepids) { count += buylogls.Count(l => l.departmentid == id); }
