EF之通过不同条件查找去重复
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>
返回原数据中不重复的序列
当给的参数为空时抛出的异常:
备注:
该方法通过使用延迟执行来实现。 立即返回值是存储执行操作所需的所有信息的对象。 通过直接调用其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之通过不同条件查找去重复的更多相关文章
- sql查找去重复并且字段不为空的数据
select distinct username,quantity from Student where isnull(username,'')<>'' and p_id = {1}
- 通过IF({1,0}和VLOOKUP函数实现Excel的双条件多条件查找的方法
在Excel中,通过VLOOKUP函数可以查找到数据并返回数据.不仅能跨表查找,同时,更能跨工作薄查找. 但是,VLOOKUP函数一般情况下,只能实现单条件查找. 如果想通过VLOOKUP函数来实现双 ...
- 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表
前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...
- Excel如何查找名字重复的数据
来源于:http://jingyan.baidu.com/article/414eccf6091ff86b431f0aec.html Cokery今天在帮助同事整理数据的时候遇到了一个难题,就是在Ex ...
- distinct 去重复查询——两个表join 连接,去掉重复的数据
------distinct 去重复查询 select * from accounts acc join (select distinct accid from roles) r on r.acci ...
- oracle中去重复记录 不用distinct
用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低 . select distinct name fro ...
- 通过编写PHP代码并运用“正则表达式”来实现对试题文档进行去重复、排序
通过编写PHP代码并运用“正则表达式”来实现对试题文档进行去重复.排序 <?php $subject = file_get_contents('test.txt'); $pattern = '/ ...
- Oracle单表去重复(二)
Oracle单表去重 去重有两层含义,一:是记录完全一样.二:是符合一定条件的认为是重复. 根据表的数量,去重可划分为:单表去重和多表关联去重. 对于去重,一般最容易想到的是用distinct,而 ...
- 【Excel】多条件查找
例如下图:要求在单元格从C10中根据分类与名称找出相应的数量 1.VLOOKUP函数(数组公式) {=VLOOKUP(A10&B10,IF({1,0},A2:A6&B2:B6,C2:C ...
随机推荐
- git 设置不需要输入密码, 去除 fetch / pull 代码每次都需要输入密码的烦恼
https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速 设置记住密码(默认15分钟): git config --global credenti ...
- bzoj4784 [Zjoi2017]仙人掌
Description 如果一个无自环无重边无向连通图的任意一条边最多属于一个简单环,我们就称之为仙人掌.所谓简单环即不经过重复的结点的环. 现在九条可怜手上有一张无自环无重边的无向连通图,但是她觉得 ...
- Printk与sched_clock_init的一点分析
在分析Linu内核启动的过程中,发现一段"不平常"的日志,感觉产生这段日志的代码肯定是"不可思议"的.因此就大致分析了一下: 日志如下: [ 0.000000] ...
- BFC块级格式上下文
BFC块级格式上下文,独立的一个渲染区域 1.同一个BFC的两个相邻盒子间的margin会重叠(垂直方向): 2.BFC内部的盒子在垂直方向上会一个接一个的放置: 3.每个子元素的左外边距与包含块的左 ...
- SectionIndexer 利用系统的控件,制作比较美观的侧栏索引控件
如上图所示,右侧的索引是系统提供的,具体使用方法,请搜索: SectionIndexer 相关的资料进行开发.
- 北漂面试经历(一(两)年工作经验)-- Java基础部分
Java基础部分 常量和变量的区别:final 关键词修饰的变量是恒定不变的,如果还有static关键词修饰的话,常常称为编译期常量.变量,运行时可以修改其引用. Java基本类似有哪些 1 Byte ...
- OC分类(Category)
Category 分类 ,又称为类别.类目 概念 Category有多种翻译:分类.类别.类目(一般叫分类的多) Category式OC特有的语法,其他语言没有的语法(类似于C#语言中的"扩 ...
- 设计模式的征途—6.建造者(Builder)模式
建造者模式又称为生成器模式,它是一种较为复杂.使用频率也相对较低的创建型模式.建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品.因为,没有人买车会只买一个方向盘或者轮胎,大 ...
- Java学习笔记——排序算法之快速排序
会当凌绝顶,一览众山小. --望岳 如果说有哪个排序算法不能不会,那就是快速排序(Quick Sort)了 快速排序简单而高效,是最适合学习的进阶排序算法. 直接上代码: public class Q ...
- Charles安装破解及使用
摘要 在发开过程中,追踪请求和监控请求与返回数据是我们经常会需要的一个需求,在Mac端,Charles是一款非常易用的抓包工具. Mac端的优秀抓包工具--Charles使用 一.简介 Charles ...