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 ; //如果它不为空,获取名称字段的
hashCode
 int hashProductName = product.Name == null ?  : product.Name.GetHashCode(); //获取代码字段的hashCode int hashProductCode = product.Code.GetHashCode(); //计算产品的hashCode return hashProductName ^ hashProductCode; } }

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

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

EF之通过不同条件查找去重复的更多相关文章

  1. sql查找去重复并且字段不为空的数据

    select distinct username,quantity  from Student where isnull(username,'')<>'' and p_id = {1}

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

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

  3. 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...

  4. Excel如何查找名字重复的数据

    来源于:http://jingyan.baidu.com/article/414eccf6091ff86b431f0aec.html Cokery今天在帮助同事整理数据的时候遇到了一个难题,就是在Ex ...

  5. distinct 去重复查询——两个表join 连接,去掉重复的数据

    ------distinct 去重复查询 select * from  accounts acc join (select distinct accid from roles) r on r.acci ...

  6. oracle中去重复记录 不用distinct

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

  7. 通过编写PHP代码并运用“正则表达式”来实现对试题文档进行去重复、排序

    通过编写PHP代码并运用“正则表达式”来实现对试题文档进行去重复.排序 <?php $subject = file_get_contents('test.txt'); $pattern = '/ ...

  8. Oracle单表去重复(二)

    Oracle单表去重 去重有两层含义,一:是记录完全一样.二:是符合一定条件的认为是重复. 根据表的数量,去重可划分为:单表去重和多表关联去重.   对于去重,一般最容易想到的是用distinct,而 ...

  9. 【Excel】多条件查找

    例如下图:要求在单元格从C10中根据分类与名称找出相应的数量 1.VLOOKUP函数(数组公式) {=VLOOKUP(A10&B10,IF({1,0},A2:A6&B2:B6,C2:C ...

随机推荐

  1. http接口加密《一》:移动应用中,通过在客户端对访问的url进行加密处理来保护服务器上的数据

    来源:http://meiyitianabc.blog.163.com/blog/static/10502212720131056273619/ 我认为,保护服务器端的数据,有这么几个关键点: 不能对 ...

  2. Vue2.x中的父子组件相互通信

    业务场景:(这里指的是直接父子级关系的通信) 美女(子组件)将消息发送给大群(父组件) 大群(父组件)收到美女发送的消息后再回个信息给美女(子组件) 父组件 template <template ...

  3. 浅谈移动端rem的用法

    一 什么是rem? “font size of the root element 这是w3c的定义 也就是说是相对于根节点(html节点)的字体大小的单位. 目前主流的浏览器基本都支持rem这个单位, ...

  4. hdu1083二分图匹配模板题

    onsider a group of N students and P courses. Each student visits zero, one or more than one courses. ...

  5. 2016年BAT公司常见的Web前端面试题整理

    1.JavaScript是一门什么样的语言,它有哪些特点? 没有标准答案. 2.JavaScript的数据类型都有什么? 基本数据类型:String,boolean,Number,Undefined ...

  6. document.all 用法

    一. document.all是页面内所有元素的一个集合.例如:        document.all(0)表示页面内第一个元素 二. document.all可以判断浏览器是否是IE     if ...

  7. vue视频学习笔记04

    video 4 手动配置自己:webpack+vue-loader webpack加载模块-------------------------------------如何运行此项目?1. npm ins ...

  8. hdu1054 Strategic Game 树形DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 思路:树形DP,用二分匹配也能解决 定义dp[root][1],表示以root 为根结点的子树且 ...

  9. Linux文件查看与查找命令

    cat  查看一个文件 -E: 显示行结束符$ -n: 对显示出的每一行进行编号 -A:显示所有控制符 -b:非空行编号 -s:压缩连续的空行成一行 -T:显示制表符 常用:cat -An /etc/ ...

  10. <javaScript> 数组去重的方法总结(2017年)

    现在要求去重下面这个数组: const arr = [1, 2, 3, 3, 3, '0', '1', '2', '测试', '重复', '重复', NaN, NaN, false, false]; ...