zoukankan      html  css  js  c++  java
  • 数据去重Distinct,IEqualityComparer,IEquatable

    很多情况下我们查询数据需要去重重复数据,下面就记录三个去重的方法。

    Distinct

    最基本的去重形式,直接查询出数据后使用Distinct方法进行字段去重。

           var strList = new List<string>() { "1","2","1"};
           var resultList = strList.Distinct();//结果1,2

    IEqualityComparer

    此方法扩展接口可以实现类级别的去重,比如我想实现其中一个表中的某些数据根据其中一个字段去重,这个时候我们就可以使用IEqualityComparer接口,首先需要对做去重的类实现接口IEqualityComparer

        //
        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();
            }
        }
    

     然后我们就可以在查询数据的地方使用此类进行对比:伪代码

     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大多用作去重性质上。

    例如:

     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;
            }
        } 

    使用:

       Model_DistIn m1 = new Model_DistIn();
       Model_DistIn m2 = new Model_DistIn();
       bool isSame = m1.Equals(m2);
    

      

  • 相关阅读:
    日常
    hdoj 5690 All X (快速幂+取模)
    hdoj 4004 The Frog's Games(二分)
    Mac androidStudio cannot resolve corresponding JNI function
    Mac 切换JDK版本
    MAC系统 如何显示隐藏的文件(文件夹)
    C 读写文件以及简单的文件加密
    C 双向链表的简单排序实现
    Android ViewDragHelper详解
    android Toast的内容过长,如何居中显示?
  • 原文地址:https://www.cnblogs.com/yanbigfeg/p/13597385.html
Copyright © 2011-2022 走看看