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

      

  • 相关阅读:
    吉特仓储管系统(开源WMS)--分享两月如何做到10W+的项目
    吉特仓库管理系统(开源)-如何在网页端启动WinForm 程序
    RequireJS中的require如何返回模块
    RequireJS shim 用法说明
    从ISTIO熔断说起-轻舟网关熔断
    数据库与数据仓库的区别是什么
    API是什么
    要想业务中台建得快,最好用Service Mesh来带
    中台建设之路-中台建设怎么做?建设中台需要具备什么?
    为什么要建设中台
  • 原文地址:https://www.cnblogs.com/yanbigfeg/p/13597385.html
Copyright © 2011-2022 走看看