实际项目中经常用到 Union,Distinct,INtersect,Execpt对列表进行处理

一般来说要首先重写 Equals 和GetHashCode方法

首先看为重写的情况:

namespace LinqCookBook
{
class Program
{
static void Main(string[] args)
{
var model1 = new List<model>
{
new model(){name = ""},
new model(){name=""},
new model(){name = ""}
}; var model2 = new List<model>
{
new model() {name = ""},
new model() {name = ""},
new model() {name = ""}
}; var list = model1.Union(model2).Distinct();
foreach (var item in list)
{
Console.WriteLine(item.name);
}
}
} public class model
{
public string name { get; set; } //public override bool Equals(object obj)
//{
// return obj.GetHashCode().Equals(this.GetHashCode());
//} //public override int GetHashCode()
//{
// return this.name.GetHashCode();
//}
}
}

运行结果:

重写后:

namespace LinqCookBook
{
class Program
{
static void Main(string[] args)
{
var model1 = new List<model>
{
new model(){name = ""},
new model(){name=""},
new model(){name = ""}
}; var model2 = new List<model>
{
new model() {name = ""},
new model() {name = ""},
new model() {name = ""}
}; var list = model1.Union(model2).Distinct();
foreach (var item in list)
{
Console.WriteLine(item.name);
}
}
} public class model
{
public string name { get; set; } public override bool Equals(object obj)
{
return obj.GetHashCode().Equals(this.GetHashCode());
} public override int GetHashCode()
{
return this.name.GetHashCode();
}
}
}

运行结果:

原因:

当元素比较时,会使用默认规则比较,通过equals和gethashcode来确定应用类的一个实例和另一个实例是否相同。通常是不相同的,因为他们指向了不同的内存地址,导致哈希值是不同的。重写以后,认为某些属性值相同则认为相同。

c# cook book -Linq 关于Object的比较的更多相关文章

  1. .NET面试题系列[13] - LINQ to Object

    .NET面试题系列目录 名言警句 "C# 3.0所有特性的提出都是更好地为LINQ服务的" - Learning Hard LINQ是Language Integrated Que ...

  2. LINQ系列:Linq to Object投影操作符

    投影是指在将序列中的元素转换为一个自定义形式的操作.投影操作符Select和SelectMany用于选择出赋予了适当功能的值.SelectMany操作符可以处理多个集合. LINQ表达式语法: 1. ...

  3. LINQ系列:Linq to Object生成操作符

    生成操作符从现有序列值中创建新的序列. 1. Empty  Empty操作符返回一个指定类型的空集. 1>. 原型定义 public static IEnumerable<TResult& ...

  4. LINQ系列:Linq to Object转换操作符

    转换是指将输入对象的类型转变为序列的动作. 1. AsEnumerable AsEnumerable操作符将查询的输入以IEnumberable(T)类型返回. 2. Cast Cast操作符将IEn ...

  5. LINQ系列:Linq to Object量词操作符

    量词操作符返回一个Boolean值,指示序列中是否存在部分或全部元素符号指定条件.LINQ中量词操作符包括:All.Any和Contains. 1. All All操作符判定在集合中是否所有的值都满足 ...

  6. LinQ To Object 基本用法

    http://www.cnblogs.com/terryzh/archive/2012/11/10/2763538.html LinQ To Object 基本用法 inq的基本语法:var resu ...

  7. SQO (标准查询运算符)方法 & Linq To Object

    #region SQO (标准查询运算符) 方法 #region Where() Find() FindAll() FirstOrDefault()等方法 static void c01where() ...

  8. 1.解剖Linq to object

    LINQ想必大家都不陌生了,它的出现使得我们的代码变得更短.更优雅了.至于LINQ是什么,Linq to object这类的扩展方法到底做了些什么.我们使用的EF是如何实现的(如何解析Expressi ...

  9. Linq to EF 与Linq to Object 使用心得

    大家都知道Linq既可以用来查询数据库对象(我这里指的是Entity FrameWork里的Model对象),也可以用来查询内存中的IEnumerable对象. 两者单独查询时都不会出现什么问题,不过 ...

随机推荐

  1. 6、OpenCV Python 图像模糊

    __author__ = "WSX" import cv2 as cv import numpy as np #均值模糊 中值模糊 自定义模糊(卷积) #卷积原理 #均值模糊 de ...

  2. P2542 [AHOI2005]航线规划 LCT维护双连通分量

    \(\color{#0066ff}{ 题目描述 }\) 对Samuel星球的探险已经取得了非常巨大的成就,于是科学家们将目光投向了Samuel星球所在的星系--一个巨大的由千百万星球构成的Samuel ...

  3. Python数组(一)

    一.索引 数组中的索引(下标)是从0开始递增的,你可以像下面这样使用编号来访问各个元素: test=['java','C#','C++','html','Spring'] print(test[0]) ...

  4. SP2713 GSS4 - Can you answer these queries IV

    题目大意 \(n\) 个数,和在\(10^{18}\)范围内. 也就是\(\sum~a_i~\leq~10^{18}\) 现在有两种操作 0 x y 把区间[x,y]内的每个数开方,下取整 1 x y ...

  5. vue学习三:生命周期钩子

    生命周期钩子介绍: 每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运行一些叫做生 ...

  6. main.obj:-1: error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall CustomButton::metaObject(void)const " (?metaObject@CustomButton@@UBEPBUQMetaObject@@XZ)

    QTCreator 运行时报错 main.obj:-1: error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject cons ...

  7. Linode安装环境

    Ubuntu 18 密码:Fenghaiyan35 netstat -plnt                           //查看所有文件 sudo apt-get install apac ...

  8. Linux安装与分区解释

    Linux安装过程中最重要的就是对硬盘进行分区: Linux是先建立一个根目录“/”,然后在根目录上建立一系列的空目录,接着把硬盘分区挂载到相应目录上. 在linux系统中至少必须有两个挂载点(磁盘分 ...

  9. 在Ubuntu中使用AppImage类型文件

    右键--属性---权限---允许作为执行文件启动

  10. Educational Codeforces Round 11 B

    Description Consider 2n rows of the seats in a bus. n rows of the seats on the left and n rows of th ...