Enumerable.Distinct<TSource> Method(IEnumerable<TSource>, IEqualityComparer<TSource>)

也就是使用的Distinct(参数1,参数2);

参数1为原数据,参数2为比较数据

通过IEqualityComparer<T> 来比较值从而返回不同的序列。

引用的名称空间:System.Linq

程序集:System.Core (在 System.Core.dll下)

语法:

public static IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> source,IEqualityComparer<TSource> comparer
)

参数:

原数据:

类型:System.Collections.Generic.IEnumerable<TSource>
指的是从中删除重复元素的序列

比较数据:

类型 : System.Collections.Generic.IEqualityComparer<TSource>
这个是与原数据的比较值

返回数据:

类型: System.Collections.Generic.IEnumerable<TSource>
返回原数据中不重复的序列

当给的参数为空时抛出的异常:

ArgumentNullException

备注:

该方法通过使用延迟执行来实现。 立即返回值是存储执行操作所需的所有信息的对象。 通过直接调用其GetEnumerator方法或在Visual C#或Visual Basic中使用foreach进行枚举,直到对象被枚举为止,才执行此方法所表示的查询。
不同的<TSource>(IEnumerable <TSource>,IEqualityComparer <TSource>)方法返回一个无序的序列,不包含重复的值。 如果comparer为null,则使用默认的等式比较器Default来比较值。

示例:

以下示例显示如何实现可在Distinct <TSource>方法中使用的等式比较器。

public class Product
{public string Name { get; set; }public int Code { get; set; }
}// 产品类的自定义比较器
class ProductComparer : IEqualityComparer<Product>
{// 如果产品的名称和产品编号相同,则产品相同public bool Equals(Product x, Product y){//检查比较对象是否引用相同的数据if (Object.ReferenceEquals(x, y)) return true;//检查所比较的对象是否为空if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))return false;//检查产品的属性是否相等return x.Code == y.Code && x.Name == y.Name;}// 如果Equals()对一对对象返回true// 那么GetHashCode()必须为这些对象返回相同的值。那么GetHashCode()必须为这些对象返回相同的值。public int GetHashCode(Product product){//检查该对象是否为空if (Object.ReferenceEquals(product, null)) return 0;//如果它不为空,获取名称字段的
hashCode
 int hashProductName = product.Name == null ? 0 : product.Name.GetHashCode(); //获取代码字段的hashCode int hashProductCode = product.Code.GetHashCode(); //计算产品的hashCode return hashProductName ^ hashProductCode; } }

实现此比较器后,可以使用Distinct <TSource>方法中的一系列Product对象,如以下示例所示。

Product[] products = { new Product { Name = "apple", Code = 9 }, new Product { Name = "orange", Code = 4 }, new Product { Name = "apple", Code = 9 }, new Product { Name = "lemon", Code = 12 } };//排除重复

IEnumerable<Product> noduplicates =products.Distinct(new ProductComparer());foreach (var product in noduplicates)Console.WriteLine(product.Name + " " + product.Code);/*返回的值如下:apple 9 orange 4lemon 12
*/

转载于:https://www.cnblogs.com/LessIsMoreZ/p/7026091.html

EF之通过不同条件查找去重复相关推荐

  1. oracle 查的数据去重复数据,Oracle查询和过滤重复数据

    对数据库某些意外情况,引起的重复数据,如何处理呢? ----------------查重复: select * from satisfaction_survey s where s.as_side = ...

  2. 【shell】笔记|去重复行|删除匹配行|反选删除|反向显示|加减乘除

    目录 配置 bash Shell忽略命令大小写 |按"上"键显示该命令的历史 shell 删除匹配行 shell 获取结果中的第n列,第n行 grep过滤 shell 注释块 Li ...

  3. linux找出重复数字,C语言笔试经典-查找多位数重复数字以及次数

    从键盘输入一个多位的整数 用程序判断 这个数里面有没有 重复的数字  有重复的数字就打印  哪个数字重复了  重复了几次 例如:输入:1122431 打印结果: 1重复 出现3次 2重复 出现2次, ...

  4. 通过IF({1,0}和VLOOKUP函数实现Excel的双条件多条件查找

    在Excel中,通过VLOOKUP函数可以查找到数据并返回数据.不仅能跨表查找,同时,更能跨工作薄查找. 但是,VLOOKUP函数一般情况下,只能实现单条件查找. 如果想通过VLOOKUP函数来实现双 ...

  5. 【python基础】list操作相关:扩充、条件查找【IndexError: list assignment index out of range】...

    参考 [https://blog.csdn.net/qq_44768814/article/details/88614393] [IndexError: list assignment index o ...

  6. excel如何匹配同名数据_Excel如何查找名字重复的数据

    解决方法: 方法一:函数公式法 第一步:输入数据. Excel如何查找名字重复的数据-1 第二步:插入需要显示重复提示的列,这里以C列为例. Excel如何查找名字重复的数据-2 第三步:插入公式(见 ...

  7. js if判断多个条件_EXCEL一对多条件查找显示多个结果(INDEX+SMALL+IF+ROW函数组合)...

    这是萌二很用心梳理编辑的一篇文,看到我的标题前面冠上了[tree],被EXCEL大咖论坛收录进知识树,很开心.你的努力总会有机会被看到,共勉! 这是个万金油公式,谁用了谁知道! [INDEX+SMAL ...

  8. Oracle中去重复记录 不用distinct

    用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低 . select distinct name fro ...

  9. python去重复记录_Python列表去重复项的N种方法(实例代码)

    说明 Python语言中列表(List)与其他语言的数组(Array)类似,是一种有序的集合数据结构,Python List可支持各种数据类型,长度也可动态调整,与JS中的数组或Java ArrayL ...

最新文章

  1. 报表在vista和win7下无法浏览应用的解决办法
  2. 集成 Kendo UI for Angular 2 控件
  3. 初中数学知识遗忘记录(持续更新中)
  4. 那天有个小孩跟我说LINQ(四)
  5. python降维之时间类型数据的处理_使用Python进行数据降维|线性降维
  6. 关于笔算递归的通用算法——迭代
  7. Dalvik和Java运行环境的区别
  8. 博弈知识汇总(转自Tanky Woo),留着以后复习
  9. 来面试,偷懒不答题,直接忽略
  10. mysql安装步骤图解5.0_MySQL5.0安装图解
  11. css练习-小米官网首页静态页面制作
  12. PCL-点云处理(一)
  13. 史上最全!大数据开源框架技术扫盲
  14. bolb layer
  15. oracle计算日期倒计时,时间倒算回去到了哪里?│机械倒数计时码表
  16. CA机构介绍(Certificate Authority 域名SSL证书颁发机构)
  17. 超超详细ReactRouter v6版本的基本使用
  18. FPGA知识点汇总(verilog、数字电路、时序分析、跨时钟域、亚稳态)
  19. JavaScript实现简单日历
  20. 【Java SE】设计模式

热门文章

  1. HPE公司升级其闪存存储产品系列
  2. ArcGIS API for Silverlight 调用GP服务绘制等值面
  3. linux下如何安装charles
  4. Linux 小知识翻译 - 「架构 续」(arch)
  5. 关于Linux目录及文档权限的研究
  6. Android View添加 Listener 小技巧示例
  7. 公司有代理 虚拟机安装ubuntu不能上外网
  8. 函数 注释规范_C++掌握标准编码规范,摘掉初级“码农”帽子!
  9. 蓝桥杯 ADV-182 算法提高 前10名
  10. wpf判断一个窗体是否运行_算法8 判断一个数是否是回文数