方案一:for等循環方法 效率過慢 數據量過大時容易卡死 不建議使用
方案二:取交集
var intersection = datalist.Intersect(ExelLsit., new TarGetComparer()).ToList(); //需要重寫IEqualityComparer Equals /// </summary> //public class TarGetComparer : IEqualityComparer<arko_dim_update_id_trial> //{ // public bool Equals(arko_dim_update_id_trial x, arko_dim_update_id_trial y) // { // try // { //需要對比的字段 // return x.fd_table == y.fd_table // && x.fd_field == y.fd_field // && x.fd_id_field == y.fd_id_field // && x.fd_id_value == y.fd_id_value; //如需對比整條數據 可直接return x==y; // } // catch (Exception ex) // { // return base.Equals(x); // } // } // public int GetHashCode(arko_dim_update_id_trial obj) // { // return 1; // } //}
相比循環較快 但當數據量超過十萬以上也會很慢 不建議使用‘;
方案三:此時需要換個思路 采用分組來對比
//首先 var existenceList = list1.Concat(list2).ToList();//合並兩個集合 //分組找到重復數據 var existenceList = existenceList.GroupBy(x => x) .Where(x => x.Count() > 1) .ToList(); //找到不重復數據 var existence = existenceList.GroupBy(x => x).ToList();
此時不僅節省代碼 效率更是大大提升;
