作者:书友66421539 | 来源:互联网 | 2023-10-11 15:53
对于简单数据类型的List,检查是否包含某个值,或去重可以直接使用List的方法Contains()或Distinct()。但是对于自定义实体(类)的List进行是否包含实体(Co
对于简单数据类型的List,检查是否包含某个值,或去重可以直接使用List的方法Contains()或Distinct()。
但是对于 自定义实体(类)的List 进行是否包含实体(Contains)的检查,或者去重(Distinct)操作时,直接使用Contains()或Distinct()方法是不能达到效果的。
此时需要我们定义一个专门处理当前自定义实体(类)的这些操作的一个类。为了方便起见,一般将这两个类(自定义的实体(类),处理这个自定义类的类) 放在一起(当然完全可以不放在一起,只要自己方便查找、管理即可)。
示例代码:
实体:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace BusinessInvestment
{
///
/// 自定义实体
///
public class ContractProjIndustryTotalInvestDto
{
///
/// 行业
///
public string Industry { get; set; }
///
/// 行业名称
///
public string IndustryName { get; set; }
///
/// 总投资
///
public decimal? TotalInvest { get; set; }
}
//用来处理 ContractProjIndustryTotalInvestDto 类的类,需要继承 IEqualityComparer接口,这个接口需要引用 System.Collections.Generic 命名空间
public class ContractProjIndustryTotalInvestDtoComparer : IEqualityComparer
{
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 tempDataList = new List();
for (int i = 0; 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();
/* 省略部分代码 */
斩后知