• C# 自定义实体(类)List 复杂实体(类)List 的 Compare, 是否包含(Contains()),去重( Distinct())


    对于简单数据类型的List,检查是否包含某个值,或去重可以直接使用List的方法Contains()或Distinct()。

    但是对于 自定义实体(类)的List 进行是否包含实体(Contains)的检查,或者去重(Distinct)操作时,直接使用Contains()或Distinct()方法是不能达到效果的。

    此时需要我们定义一个专门处理当前自定义实体(类)的这些操作的一个类。为了方便起见,一般将这两个类(自定义的实体(类),处理这个自定义类的类) 放在一起(当然完全可以不放在一起,只要自己方便查找、管理即可)。

    示例代码:

    实体:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Text;
    
    namespace BusinessInvestment
    {
        /// <summary>
        /// 自定义实体
        /// </summary>
        public class ContractProjIndustryTotalInvestDto
        {
            /// <summary>
            ///  行业
            /// </summary>                
            public string Industry { get; set; }       
    
            /// <summary>
            ///  行业名称
            /// </summary>        
            public string IndustryName { get; set; }
    
            /// <summary>
            ///  总投资
            /// </summary>        
            public decimal? TotalInvest { get; set; }
            
        }  
    
      //用来处理 ContractProjIndustryTotalInvestDto 类的类,需要继承 IEqualityComparer接口,这个接口需要引用 System.Collections.Generic 命名空间
        public class ContractProjIndustryTotalInvestDtoComparer : IEqualityComparer<ContractProjIndustryTotalInvestDto>
        {
            public bool Equals(ContractProjIndustryTotalInvestDto x, ContractProjIndustryTotalInvestDto y)
            {
                if (x == null || y == null)
                    return false;
                if (x.Industry == y.Industry && x.IndustryName==y.IndustryName)//自定义的比较的方法,这里就是核心了
                    return true;
                else
                    return false;
            }
    
            public int GetHashCode(ContractProjIndustryTotalInvestDto obj)
            {
                if (obj == null)
                    return 0;
                else
                    return obj.IndustryName.GetHashCode();
            }
        }
    }

    应用:

    /* 省略部分代码 */
    // originalDataList 为原始数据
    List<ContractProjIndustryTotalInvestDto> tempDataList = new List<ContractProjIndustryTotalInvestDto>();
    for (int i = 0; i < originalDataList.Count; i++)
    {
        var currentTempData = originalDataList[i];
        //判断 tempDataList 列表是否包含当前循环的实体(Contains())
        var isContains=tempDataList.Contains(currentTempData,new ContractProjIndustryTotalInvestDtoComparer());
        if (!isContains)
        {
            /* 省略部分代码 */
            tempDataList.Add(currentTempData);                
            /* 省略部分代码 */
        }
    }
    //对 tempDataList 列表去重(Distinct())
    var retData = tempDataList.Distinct(new ContractProjIndustryTotalInvestDtoComparer()).ToList();
    /* 省略部分代码 */
    斩后知
  • 相关阅读:
    java编辑器eclipse如何更改jdk版本
    java 获取实体类对象属性值的方法
    java 时间处理
    java file的一些方法
    java中的包装类与装箱拆箱定义
    java中的分支
    java中的循环
    冒泡排序法
    HDFS数据迁移解决方案之DistCp工具的巧妙使用
    HDFS数据迁移解决方案之DistCp工具的巧妙使用
  • 原文地址:https://www.cnblogs.com/dyhao/p/15465876.html
Copyright © 2020-2023  润新知