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

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

  

数据去重Distinct,IEqualityComparer,IEquatable的更多相关文章

  1. 如何使用Linq或EF来对数据去重——Distinct方法详解

    刚开始接触LINQ时使用distinct去重时和大家一样遇到了一些麻烦,很感谢 http://www.cnblogs.com/A_ming/archive/2013/05/24/3097062.htm ...

  2. MYSQL数据去重与外表填充

    经常要对数据库中的数据进行去重,有时还需要使用外部表填冲数据,本文档记录数据去重与外表填充数据. date:2016/8/17 author:wangxl 1 需求 对user_info1表去重,并添 ...

  3. 【Hive】数据去重

    实现数据去重有两种方式 :distinct 和 group by 1.distinct消除重复行 distinct支持单列.多列的去重方式. 单列去重的方式简明易懂,即相同值只保留1个. 多列的去重则 ...

  4. Oracle数据去重

    一.完全重复数据去重方法    具体思路是,首先创建一个临时表,然后将DISTINCT之后的表数据插入到这个临时表中;然后清空原表数据;再讲临时表中的数据插入到原表中;最后删除临时表. 对于表中完全重 ...

  5. postgresql使用group by进行数据去重-2022新项目

    一.业务场景 数据去重是web开发中经常会遇到的方式之一,数据库操作中有一个关键字distinct主要就是用来做这件事,用来进行去重. 比如进行统计查询的时候,可以这样写 select count(d ...

  6. [Hadoop]-从数据去重认识MapReduce

    这学期刚好开了一门大数据的课,就是完完全全简简单单的介绍的那种,然后就接触到这里面最被人熟知的Hadoop了.看了官网的教程[吐槽一下,果然英语还是很重要!],嗯啊,一知半解地搭建了本地和伪分布式的, ...

  7. mysql 查询去重 distinct

    mysql 查询去重 distinct   待完善内容..

  8. map/reduce实现数据去重

    import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.co ...

  9. EXCEL技能之数据去重

    本篇不属于技术类博文,只是想找个地方记录而已,既然是我的博客嘛,那就自己想写什么就写什么了. CRM中有个EXCEL数据导入功能,几千条数据导入CRM后去重,那是死的心都有的.往回想想EXCEL是否有 ...

随机推荐

  1. Vuex详细教程

    1.认识Vuex 1.1Vuex是做什么的 官方解释:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用 集中式存储管理 应用的所有组件的状态,并以相应的规则保证状态以一种可预测的 ...

  2. [转]Java CPU 100% 排查技巧

    文章来源:微信公众号:猿天地 平时多积累一点,这样在遇到问题的时候就少句求人的话.如果在实际的开发中遇到CPU 100%问题,要怎么排查呢?如果你没有遇到过这个问题,请先自己思考10s,如果你遇到过, ...

  3. Android 生命周期,解决savedInstanceState一直为null的问题

    在此之前还是补充下关于监听器的两个要点:   向下一个活动传递数据 : button1.setOnClickListener(new View.OnClickListener() { @Overrid ...

  4. 手敲代码太繁琐?“拖拉拽”式Python编程惊艳到我了

    Python到底有多火,从后端开发到前端开发:从金融量化分析到大数据:从物联网到人工智能,都有Python的踪迹. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后, ...

  5. Spring Boot Logback 默认配置

    Spring Boot Logback 默认配置 标签(空格分隔): Spring Boot Intro(介绍) Spring Boot 1.5.9 默认使用的日志框架是 Logback. 生效的默认 ...

  6. AI顶会

    自己如何学习CV paper with code(每周) 基石方向 1.image classification 这个肯定要关注,这个往往都是backbone https://paperswithco ...

  7. js 打开新窗体

    function nw(repId,formulaId){ if(!repId){ repId='0' } if(!formulaId){ formulaId='0' } var url='/slsi ...

  8. JS学习第八天

    DOM访问列表框.下拉菜单的常用属性: form返回列表框.下拉菜单所在的表单对象; length返回列表框.下拉菜单的选项个数; options返回列表框.下拉菜单里所有选项组成的数组; defau ...

  9. 2020-06-07:mysql中varchar类型的id,where id=1,会用到索引吗?int 类型的id,where id="1",会用到索引吗?为什么?

    福哥答案2020-06-07: 答案来自群员:对于int类型id,查询的varchar 类型 ‘1’会隐式转换成 1,‘1’和 1都能正常走索引:对于varchar类型id,查询的int 类型 1不会 ...

  10. C#算法设计排序篇之01-冒泡排序(附带动画演示程序)

    冒泡排序(Bubble Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/672 访问. 它重复地访问要排序的元 ...