数据去重Distinct,IEqualityComparer,IEquatable
很多情况下我们查询数据需要去重重复数据,下面就记录三个去重的方法。
Distinct
最基本的去重形式,直接查询出数据后使用Distinct方法进行字段去重。
1 2 | var strList = new List< string >() { "1" , "2" , "1" }; var resultList = strList.Distinct(); //结果1,2 |
IEqualityComparer
此方法扩展接口可以实现类级别的去重,比如我想实现其中一个表中的某些数据根据其中一个字段去重,这个时候我们就可以使用IEqualityComparer接口,首先需要对做去重的类实现接口IEqualityComparer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // public class Model_DistIn: IEqualityComparer<T_mode> { public bool Equals(T_modex, T_modey) { if (x == null || y == null ) return false ; if (x.orderId == y.orderId) return true ; else return false ; } public int GetHashCode(T_modeobj) { if (obj == null ) return 0; else return obj.orderId.GetHashCode(); } } |
然后我们就可以在查询数据的地方使用此类进行对比:伪代码
1 2 3 4 5 6 7 8 9 | var resultList = db.Entities .OrderByDescending(b => b.addTime) .ToList() .Distinct( new Model_DistIn()) .Select(b => new ComoboData { text = b.orderNum, value = b.orderId, }).ToList(); |
IEquatable
此接口方法跟IEqualityComparer写法很类似,都是用作比较确定某个对象与当前实例在结构上是否相等。但是这个一般使用在自定义对象比较字段。
而IEqualityComparer大多用作去重性质上。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public class Model_DistIn: IEquatable<Model_DistIn> { public string orderId { get ; set ; } public string orderName { get ; set ; } public bool Equals(Model_DistIn x, Model_DistIn y) { if (x == null || y == null ) return false ; if (x.orderId == y.orderId) return true ; else return false ; } public bool Equals(Model_DistIn obj) { if (obj == null ) return false ; else return true ; } } |
使用:
1 2 3 | Model_DistIn m1 = new Model_DistIn(); Model_DistIn m2 = new Model_DistIn(); bool isSame = m1.Equals(m2); |
作者:YanBigFeg —— 颜秉锋
出处:http://www.cnblogs.com/yanbigfeg
本文版权归作者和博客园共有,欢迎转载,转载请标明出处。如果您觉得本篇博文对您有所收获,觉得小弟还算用心,请点击右下角的 [推荐],谢谢!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步