方案一: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();
此时不仅节省代码 效率更是大大提升;
            
原文:https://www.cnblogs.com/jmf0529/p/14252438.html