c# cook book -Linq 关于Object的比较
实际项目中经常用到 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的比较的更多相关文章
- .NET面试题系列[13] - LINQ to Object
.NET面试题系列目录 名言警句 "C# 3.0所有特性的提出都是更好地为LINQ服务的" - Learning Hard LINQ是Language Integrated Que ...
- LINQ系列:Linq to Object投影操作符
投影是指在将序列中的元素转换为一个自定义形式的操作.投影操作符Select和SelectMany用于选择出赋予了适当功能的值.SelectMany操作符可以处理多个集合. LINQ表达式语法: 1. ...
- LINQ系列:Linq to Object生成操作符
生成操作符从现有序列值中创建新的序列. 1. Empty Empty操作符返回一个指定类型的空集. 1>. 原型定义 public static IEnumerable<TResult& ...
- LINQ系列:Linq to Object转换操作符
转换是指将输入对象的类型转变为序列的动作. 1. AsEnumerable AsEnumerable操作符将查询的输入以IEnumberable(T)类型返回. 2. Cast Cast操作符将IEn ...
- LINQ系列:Linq to Object量词操作符
量词操作符返回一个Boolean值,指示序列中是否存在部分或全部元素符号指定条件.LINQ中量词操作符包括:All.Any和Contains. 1. All All操作符判定在集合中是否所有的值都满足 ...
- LinQ To Object 基本用法
http://www.cnblogs.com/terryzh/archive/2012/11/10/2763538.html LinQ To Object 基本用法 inq的基本语法:var resu ...
- SQO (标准查询运算符)方法 & Linq To Object
#region SQO (标准查询运算符) 方法 #region Where() Find() FindAll() FirstOrDefault()等方法 static void c01where() ...
- 1.解剖Linq to object
LINQ想必大家都不陌生了,它的出现使得我们的代码变得更短.更优雅了.至于LINQ是什么,Linq to object这类的扩展方法到底做了些什么.我们使用的EF是如何实现的(如何解析Expressi ...
- Linq to EF 与Linq to Object 使用心得
大家都知道Linq既可以用来查询数据库对象(我这里指的是Entity FrameWork里的Model对象),也可以用来查询内存中的IEnumerable对象. 两者单独查询时都不会出现什么问题,不过 ...
随机推荐
- Unity苹果(iOS)内购接入(Unity内置IAP)
https://www.jianshu.com/p/4045ebf81a1c Unity苹果(iOS)内购接入(Unity内置IAP) Kakarottog ...
- 非maven项目 idea project structure
原文链接:https://www.cnblogs.com/jajian/p/8081640.html 最近接手非maven项目,需要熟悉idea的project structure,以解决出现的环境报 ...
- P4199 万径人踪灭 FFT + manacher
\(\color{#0066ff}{ 题目描述 }\) \(\color{#0066ff}{输入格式}\) 一行,一个只包含a,b两种字符的字符串 \(\color{#0066ff}{输出格式}\) ...
- [JSOI2009]瓶子和燃料 BZOJ2257 数学
题目描述 jyy就一直想着尽快回地球,可惜他飞船的燃料不够了.有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy的飞船上共有 N个瓶子(1<=N<=1000) ...
- 牛客寒假算法基础集训营4 G Applese 的毒气炸弹
链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 众所周知,Applese 是个很强的选手,它的化学一定很好. 今天他又AK了一套题觉得很无聊,于是 ...
- ftp 添加用户及修改用户目录
添加用户 : useradd 用户名 -s /sbin/nologin //限定用户test不能telnet,只能ftp; usermod -s /sbin/bash 用户名 //用户恢复正常 ;该账 ...
- Java String 字符串操作小结
// 转载加编辑 -- 21 Apr 2014 1. Java字符串中子串的查找 Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现 ...
- windows服务开启(收藏url)
windows服务开启(收藏url) http://blog.csdn.net/wanda39kela/article/details/46310093
- PHP、thinkPHP5.0开发网站文件管理功能(三)重命名文件
public function renames(){ if(request()->isAjax()){ $file = iconv('UTF-8','GB2312',urldecode(inpu ...
- windows 远程到ubuntu桌面
Windows remote connect ubuntu desktop 1. install xRDP sudo apt-get update sudo apt-get install xrdp ...